创建Visual Studio Code扩展以自定义语言的语法突出显示

Rus*_*bbs 5 json syntax-highlighting visual-studio-code tmlanguage vscode-extensions

我正在尝试在Visual Studio Code中创建扩展,以便为自定义语言启用语法突出显示。我在这里找到@Wosi提供的有用建议:在Visual Studio Code中创建自定义语言。基于此,我尝试进行以下测试。我创建下一个子文件夹%USERPROFILE%\.vscode\extensionspackage.json在根定义如下(从上面的例子):

{
    "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"
        }]
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我在其下创建了一个语法子文件夹,并mylang.tmLanguage根据@wozi给出的示例在其中包含一个文件:如何为VS Code创建简单的自定义语言着色有一些小的修改只是为了使命名与上述JSON一致文件:

<?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>
Run Code Online (Sandbox Code Playgroud)

但是,当我使用以下测试文件(test.mylang)打开Visual Studio代码(v1.11.2)时:

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!
Run Code Online (Sandbox Code Playgroud)

关键字没有颜色(提示,警告,失败)。我需要做其他事情来指定主题吗?还是我需要指定一个新的唯一UUID(如果这样,我可以自己组成一个UUID,还是需要以某种方式进行注册)?

Gam*_*a11 5

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

问题是info-token默认主题中没有与范围相关的颜色(因此为“无主题选择器”)。看来,由于您链接该其他答案,因此这些作用域的名称已更改为包括token.VSCode 1.9.0的-prefix。在#18839中进行了讨论,并且以新名称重新引入了这些范围的相关承诺是b2aa308

在VSCode 1.13.0,我得到预期的使用着色token.info-tokentoken.warn-token以及token.error-token