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

2024-05-27

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

我正在尝试通过注入语法来做到这一点source.c and source.cpp语言范围,遵循VS Code 语法高亮指南 https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide#injection-grammars。根据指南,在注入选择器范围前加上前缀L:意味着“注入的语法规则将在任何现有语法规则之前应用”。这似乎适用于 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(字符串和注释除外):

{
    "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"
        }
    }
}

In C, things work as expected: par_for highlighting in C: correct

But in C++, par_for gets treated like a function name: par_for highlighting in C++: wrong

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

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

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


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐