为自定义语言的语法突出显示创建 Visual Studio 代码扩展
Creating Visual Studio Code extension for syntax highlighting of a custom language
我正在尝试在 Visual Studio 代码中创建一个扩展,以便为自定义语言启用语法突出显示。我在这里找到了@Wosi 提供的有用建议:Create Custom Language in Visual Studio Code。基于此,我尝试进行以下测试。我在 %USERPROFILE%\.vscode\extensions
下创建了一个子文件夹,根目录中的 package.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"
}]
}
}
然后我在它下面创建了一个 syntaxes 子文件夹,并根据@wozi 在这里给出的示例包含了一个 mylang.tmLanguage
文件: 有一些小的修改只是为了使命名一致使用上述 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>
但是,当我打开带有以下测试文件 (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!
关键字(提示、警告、失败)没有颜色。我需要做其他事情来指定主题吗?或者我是否需要指定一个新的唯一 UUID(如果是这样,我可以自己制作,还是需要以某种方式注册)?
当您 运行 Developer: Inspect TM scopes
命令时,您可以看到正在使用正确的范围:
问题是在默认主题中没有与 info-token
范围关联的颜色(因此 "No theme selector")。好像是因为, 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.
在 VSCode 1.13.0 中,我使用 token.info-token
、token.warn-token
和 token.error-token
:
获得了预期的着色
我正在尝试在 Visual Studio 代码中创建一个扩展,以便为自定义语言启用语法突出显示。我在这里找到了@Wosi 提供的有用建议:Create Custom Language in Visual Studio Code。基于此,我尝试进行以下测试。我在 %USERPROFILE%\.vscode\extensions
下创建了一个子文件夹,根目录中的 package.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"
}]
}
}
然后我在它下面创建了一个 syntaxes 子文件夹,并根据@wozi 在这里给出的示例包含了一个 mylang.tmLanguage
文件:
<?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>
但是,当我打开带有以下测试文件 (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!
关键字(提示、警告、失败)没有颜色。我需要做其他事情来指定主题吗?或者我是否需要指定一个新的唯一 UUID(如果是这样,我可以自己制作,还是需要以某种方式注册)?
当您 运行 Developer: Inspect TM scopes
命令时,您可以看到正在使用正确的范围:
问题是在默认主题中没有与 info-token
范围关联的颜色(因此 "No theme selector")。好像是因为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.
在 VSCode 1.13.0 中,我使用 token.info-token
、token.warn-token
和 token.error-token
: