How to add keywords (syntax highlighting) to language extension? - visual-studio-code

Does anyone know of a way to add new keywords (for syntax highlighting) to a language extension from the marketplace? Specifically I'm using the PL/SQL extension but it's missing some keywords I'd like to add (like BETWEEN, GREATEST, LEAST) without recreating the whole language extension myself. It was pretty easy to associate new file extensions with it but I haven't been able to find any documentation on adding keywords like you can in Notepad++ for example.
Is there documentation somewhere I missed?

Add the keywords to the language's syntax file
Open the extension's folder
Windows: %USERPROFILE%\.vscode\extensions\casian.plsql-0.0.2
Mac/Linux: $HOME/.vscode/extensions/casian.plsql-0.0.2
Open the .tmLanguage file
Go to the line which contains the highlighted keywords such as select and from.
Add the missing keywords to the list and save the file
Reload VSCode. Now the recently added keywords appear highlighted
Backup the .tmLanguage file. Your changes will be overwritten when there is an update for the plugin.

Related

Fuzzy file opening in vscode

I am exploring vscode after using atom for a long while. One of the things I'm missing is an equivalent of the lovely package advanced-open-file. Is there something similar to this in vscode?
I found the advanced-new-file extension, but it is only helpful when it comes to new files. I would like to be able to quickly open files from all over my local files (not only the workspace).
Edit: I found the option of workbench.action.quickOpen; but it doesn't allow opening files from the whole file system.
Sorry, but currently the answer is no. The problem is that input box doesn't provide a way to listen to key events:
GitHub issue,
so even the extensions can't do that currently. Here's the comment from advanced-new-file extension creator:
Because VSCode extensions don't yet have the ability to do type-ahead autocomplete within the text input box (See https://github.com/Microsoft/vscode/issues/426), we work around this limitation and provide autocomplete using a two-step workflow of selecting existing path, then providing new filename/path relative to the selection.
The good news is that there is a new API addressing this issue, but it's currently in 'proposed' state and can't be used for published extensions.
One workaround could be typing code -r some/path in integrated terminal and using 'tab' for autocomplete.
The Fuzzy search extension seems to work for me.
It adds a new action to the command palette which allows you to search for files in the current project and open them.

VS Code - Text formatting in a new language extension

I'm building an extension providing a syntax highlighting for the 'Jack' language used in an online course I am taking (Nand2Tetris at Coursera - it is not a part of the course assignment). I have the syntax highlighting rules ready, but I would like to add custom formatting for some language elements. In particular, I would like type definitions to appear in italic.
I know how to change the user settings to get the desired result on my VS Code installation, but I would like that formatting to be the default behavior for anyone using the extension.
I've tried to create a new theme extension and then copy paste the 'themes' folder from it to the 'syntax' extension and reference the file from that folder in package.json, but it didn't work. I also tried adding the 'configuration' setting in the 'contributes' section of package.json, without success. I browsed numerous VC Code extensions on GitHub and couldn't find one providing similar functionality.
Is it even possible to provide syntax definition and 'theming' in one extension? If so how?
Based on VS Code Semantic Highlight Guide, besides syntax highlighting rules, you'll also need
Implement and register a Semantic token provider in your extension.
Declare Enablement of semantic highlighting in settings.json.
Customize tokens in Theming.
VS Code team kindly provides a Semantic tokens sample. Note that this example skips step 3 and customizes tokens directly in settings.json.

How to associate a custom file extension with the MSBuild Tools in VSCode

Take any C# project file (*.csproj and rename it to *.build and then open it with VS Code. It will be recognized as XML.
What I would like is to associate VsCode MSBuild Tools with that custom extension. I already tried provide a file association like
"files.associations": {
"*.build":"csproj"
}
files.associations changes the language type, so the example you gave tells vscode that *.build has the language id csproj. There is no language id csproj by default and this extension does not add one. What you really wanted was this:
"files.associations": {
"*.build":"xml"
}
That tells vscode to treate .build files as xml files.
However, that still won't fix your problem. I looked at the code in the extension by installing it and digging around (unfortunately it isn't on github) and I can see that it explicitly checks for files that match one of the following:
RegExp("\\.props$"),
RegExp("\\.targets$"),
RegExp("\\..*proj$")
.build does not match that and therefore the extension will not work on those files.
I suggest leaving a review on the marketplace asking for two things:
1) the extension source to be put on github
2) the author to make the extensions parsed configurable in user settings
You may also consider alternative extensions such as this one.

How to edit existing VS Code Snippets

Is there a way to remove or edit some of the default code snippets in Visual Studio CODE ?
For example when i type req+TAB i need require not requestAnimationFrame
The extensions snippets can be found inside each snippet directory below:
(if there are snippets in the extension)
Mac/Linux: $HOME/.vscode/extensions/
Windows: %USERPROFILE%\.vscode\extensions/
Select the extension you want to modify and then dive into the javascript.json file in snippets/ directory in there, and change whatever you like.
Just remember that if/when you choose to download and update the extension someday, all your personal modifications will get overwritten/replaced out with the updated version of the file.
(unless of course you squirrel away your changes outside of the extension's directory...)
Edit/Aside:
Looking closely at all the copied editions already present in this directory, it appears that at least some of the extension updates keep the former version around. If this is the case, when you update an extension when a new version is released, you wouldn't need to worry about storing a copy of your modified file somewhere else; returning a file to active duty might just be as easy as a copy-paste from the old into the appropriate, newer, higher numbered directory.
Resources/citations/acknowledgements:
Thanks to here for helping initially pointing me towards the relevant directory.
The suggestion item requestAnimationFrame is coming from the JavaScript language service. It's not coming from the snippets.
However, you can define your own snippets and tell Visual Studio Code to show the snippets first. How to do it:
Go to File -> Preferences -> User Snippets and select JavaScript in order to edit snippets for that language
Add this entry to the opened file javascript.json and save it
"require": {
"prefix": "req",
"body": [
"require"
],
"description": "Add 'require'"
}
Add the following line to your preferred settings.json (user or workspace settings) and save it
"editor.snippetSuggestions": "top"
Now you get your self defined require suggestion in first place as soon as you type req in a .js file.
On my Windows10 machine the log and other default javascript snippets can be found in :
C:\Users\$USER\AppData\Local\Programs\Microsoft VS Code\resources\app\extensions\javascript\snippets\javascript.json
On my Windows installation the default/built-in JavaScript snippets are located in
C:\Program Files (x86)\Microsoft VS Code\resources\app\extensions\javascript\snippets\javascript.json
I renamed that snippet to "logx" (requires admin privileges to modify the file) and restarted vsCode and now have just my user "log" snippet.
There are some threads about this on the issue tracker -
https://github.com/Microsoft/vscode/issues/10565
https://github.com/Microsoft/vscode/issues/48315
Attention everyone!
This is now possible in the latest vscode. Solution here: https://github.com/microsoft/vscode/issues/10565#issuecomment-721832613
That solution tells you how to disable any snippet (including built-in or extension snippets). While this is technically not editing the snippet, disabling the snippet and then creating your own user snippet accomplishes the same exact goal. Yay!
I found mine at ~/.config/Code/User/snippets
If you want to create a global snippet, create a file named snippet_name.code-snippets
If you want a language specific snippet, create it like php.json
Hiding default VSCode snippets is easy:
you can hide specific snippets from showing in IntelliSense (completion list) by selecting the Hide from IntelliSense button to the right of snippet items in the Insert Snippet command dropdown.
https://code.visualstudio.com/docs/editor/userdefinedsnippets#_can-i-remove-snippets-from-intellisense

How do I add my own completions to sublime text 3?

I've been looking everywhere for an answer and I can't seem to make sense of anything I find. There's either to references to files that don't exist in my installation, or the file does exist but is just raw hexadecimal data rather than code. For example, I keep seeing that I should look in my packages/(insert programming language here) folder to access autocompletion files for that particular language. Unfortunately, when I click browse packages, the folder only contains a bz2 folder and a User folder.
I'm trying to modify sublime text's PHP autocompletion and make it so that whenever I type
<?
I can hit enter and it would autocomplete to
<?php ?>
with the cursor set between the tags. I've seen this as well but as I said earlier I've had problems getting any of these solutions to work for me.
How do I add this simple autocompletion to my sublime text 3?
You can do that by adding snippets. Just go to Tools > New Snippet.... There's a lot of docs about how to write a snippet.
Also, in your case, you can install the Additional PHP Snippets and trigger that completition by typing php and hitting tab