VS Code:自定义关键字的注入语法范围在 C++ 中被覆盖

Swe*_*ers 6 c++ textmate syntax-highlighting visual-studio-code

我想制作一个小型 VS Code 扩展,为 C/C++ 代码中的少数自定义关键字添加语法突出显示。

我正在尝试按照VS Code 语法突出显示指南,将语法注入到source.c和语言范围中来做到这一点。根据指南,为注入选择器范围添加前缀意味着“注入的语法规则将在任何现有语法规则之前应用”。这似乎适用于 C 代码,但在 C++ 中,一些(但不是全部)语法规则会覆盖我注入的语法。source.cppL:

对于 MWE,假设我想par_for为并行循环添加关键字。

我在中定义扩展名package.json

{
    ...
    "contributes": {
        "grammars": [{
            "scopeName": "parfor.injection",
            "path": "./syntaxes/parfor.injection.json",
            "injectTo": ["source.c", "source.cpp"]
        }]
    }
}
Run Code Online (Sandbox Code Playgroud)

以及注入的语法,syntaxes/parfor.injection.json将我的新范围应用keyword.control.parfor到所有实例par_for(字符串和注释除外):

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

在 C 中,事情按预期进行: par_for 在 C 中突出显示:正确

但在 C++ 中,par_for被视为函数名称: C++ 中的 par_for 突出显示:错误

屏幕截图取自禁用所有扩展的 VS Code 测试实例。

C++ 中的问题显然是由下面的括号触发的par_for;如果我写,例如,,par_for foo那么范围将按预期keyword.control.parfor应用。par_for

有没有办法确保我注入的语法模式优先于 C++ 语法正在执行的任何操作?