【发布时间】:2022-11-11 19:05:55
【问题描述】:
我想制作一个小的 VS Code 扩展来为 C/C++ 代码中的一些自定义关键字添加语法高亮。
我正在尝试使用source.c 和source.cpp 语言范围内的注入语法来做到这一点,遵循VS Code syntax highlighting guide。根据指南,在注入选择器范围前加上 L: 意味着“[the] 注入语法的规则将在任何现有语法规则之前应用”。这似乎适用于 C 代码,但在 C++ 中,一些(但不是全部)语法规则会覆盖我注入的语法。
对于 MWE,假设我想为并行循环添加一个 par_for 关键字。
我在package.json 中定义了扩展名:
{
...
"contributes": {
"grammars": [{
"scopeName": "parfor.injection",
"path": "./syntaxes/parfor.injection.json",
"injectTo": ["source.c", "source.cpp"]
}]
}
}
和syntaxes/parfor.injection.json 中的注入语法将我的新范围keyword.control.parfor 应用于par_for 的所有实例(字符串和cmets 除外):
{
"scopeName": "parfor.injection",
"injectionSelector": [
"L:source.c -string -comment",
"L:source.cpp -string -comment"
],
"patterns": [
{ "include": "#parfor-keyword" }
],
"repository": {
"parfor-keyword": {
"name": "keyword.control.parfor",
"match": "\\bpar_for\\b"
}
}
}
屏幕截图取自禁用所有扩展的 VS Code 测试实例。
C++ 中的问题显然是由par_for 后面的括号触发的;如果我写,比如说,par_for foo,那么keyword.control.parfor 范围会按预期应用于par_for。
有没有办法确保我注入的语法模式优先于 C++ 语法所做的任何事情?
【问题讨论】:
-
我正在尝试做同样的事情,只是我的添加更简单:Byte、Word16 等。我尝试按照您的示例进行操作,但是没有可以在我的安装中创建 Byte.injection.json 的 syntaxes/ 目录(在~/.vscode。你能为你的文件添加提供完整的路径名和更多上下文吗?Byte.injection.json 文件在哪里?任何帮助表示赞赏。你有没有成功解决你的问题?
标签: c++ visual-studio-code syntax-highlighting textmate