Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating Visual Studio Code extension for syntax highlighting of a custom language

I'm trying to create an extension in Visual Studio Code so as to enable syntax highlighting for a custom language. I found the helpful advice offered by @Wosi here: Create Custom Language in Visual Studio Code. Based on that I attempted to the following test. I created a subfolder under %USERPROFILE%\.vscode\extensions with a package.json in the root defined as follows (from the above example):

{
    "name": "mylang",
    "version": "0.0.1",
    "engines": {
        "vscode": ">=0.9.0-pre.1"
    },
    "publisher": "me",
    "contributes": {
        "languages": [{
            "id": "mylang",
            "aliases": ["MyLang", "mylang"],
            "extensions": [".mylang",".myl"]
        }],
        "grammars": [{
            "language": "mylang",
            "scopeName": "source.mylang",
            "path": "./syntaxes/mylang.tmLanguage"
        }]
    }
}

I then created a syntaxes subfolder under that, and included a mylang.tmLanguage file based on the example given by @wozi here: How to create a simple custom language colorization to VS Code There a couple of minor modifications simply to make the naming consistent with the above JSON file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>scopeName</key>
        <string>source.mylang</string>

        <key>fileTypes</key>
        <array>
            <string>mylang</string>
            <string>myl</string>
        </array>

        <key>name</key>
        <string>mylang file</string>

        <key>patterns</key>
        <array>
            <dict>
                <key>match</key>
                <string>\b(?i:(hint|info|information))\b</string>
                <key>name</key>

                <string>info-token</string>
            </dict>                
            <dict>
                <key>match</key>
                <string>\b(?i:(warning|warn))\b</string>
                <key>name</key>
                <string>warn-token</string>
            </dict>
            <dict>
                <key>match</key>
                <string>\b(?i:(Error|Failure|Fail))\b</string>
                <key>name</key>
                <string>error-token</string>
            </dict>
            <dict>
                <key>match</key>
                <string>\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b</string>
                <key>name</key>
                <string>constant.numeric</string>
            </dict>                                
        </array>
        <key>uuid</key>
        <string>FF0550E0-3A29-11E3-AA6E-0800200C9A77</string>
    </dict>
</plist>

However, when I open Visual Studio Code (v1.11.2) with the following test file (test.mylang):

2017-04-17 18:38 Hint This should be blue!
2017-04-17 18:38 Warning This should be amber!
2017-04-17 18:38 Fail This should be red!

There are no colours for the keywords (Hint, Warning, Fail). Do I need to do something else to specify a theme? Or do I need to specify a new unique UUID (and if so, can I just make up my own, or do I need to register it somehow)?

like image 588
Russell.Hobbs Avatar asked Apr 17 '17 18:04

Russell.Hobbs


People also ask

How do I create a custom extension in Visual Studio?

Use the Manage Extensions dialog box to install and manage Visual Studio extensions. To open the Manage Extensions dialog, choose Extensions > Manage Extensions. Or, type Extensions in the search box and choose Manage Extensions.

Does VS Code have syntax highlighting?

Syntax highlighting determines the color and style of source code displayed in the Visual Studio Code editor. It is responsible for colorizing keywords like if or for in JavaScript differently than strings and comments and variable names.


1 Answers

When you run the Developer: Inspect TM scopes command, you can see that the correct scopes are being used:

The issue is that there's no color associated with the info-token scope in the default theme(s) (hence "No theme selector"). It seems that since that other answer you linked, the names of these scopes changed to include a token.-prefix with VSCode 1.9.0. This was discussed in #18839, and the relevant commit that reintroduced these scopes with new names is b2aa308.

In VSCode 1.13.0, I get the expected coloring using token.info-token, token.warn-token and token.error-token:

like image 178
Gama11 Avatar answered Oct 06 '22 18:10

Gama11