在 Visual Studio 代码扩展中嵌入语言语法

Embedding Language Syntax in Visual Studio Code Extension

我正在尝试让 VSCode 在我正在编写的扩展程序中对嵌入式语言使用语法突出显示。

很像 Razor,我希望在 @{} 之间突出显示 c# 代码。

在我的 package.json 我的 contributes 部分有以下内容:

        "languages": [
        {
            "id": "csasm",
            "aliases": ["CS Asm", "csasm"],
            "extensions": [".csasm"],
            "configuration": "./language-configuration.csasm.json"
        }],
        "grammars": [
        {
            "language": "csasm",
            "scopeName": "source.csasm",
            "path": "./syntaxes/csasm.tmLanguage.json",
            "embeddedLanguages": {
                "meta.embedded.block.csharp" : "csharp"
            }
        }]

csasm.tmLanguage.json 文件:

{
    "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
    "name": "CS Asm",
    "patterns": [
        {
            "include":"#csasm"
        }
    ],
    "repository": {
        "csasm" :{
            "patterns": [{
                "name" : "meta.embedded.block.csharp",
                "begin": "@{",
                "end": "}",
            }]
        }
    },
    "scopeName": "source.csasm"
}

我的理解是 @{} 的匹配会标记带有 meta.embedded.block.csharp 的行,它链接到 project.json 中的 embeddedLanguages ,但情况似乎并非如此。

我找不到 embeddedLanguages 标签的任何示例。 (我已经尝试搜索 Razor 如何实现这一点,但他们似乎有合适的语言服务器?)

我什至找不到调试问题的方法。

如何让 embeddedLanguages 工作?或者失败了,我该如何调试它?

编辑: 更改了语言文件,使 csasm 如下所示,并删除了 embeddedLanguages 部分。

            "patterns": [{
                "name" : "meta.embedded.block.csharp",
                "begin": "@{",
                "end": "}",
                "patterns" : [{
                    "include" : "source.csharp"
                }]
            },

对 C# 仍然不满意。我再开一个问题。

可在此处找到 reStructuredText 语言的工作示例,

https://github.com/trond-snekvik/vscode-rst/blob/v1.5.1/syntaxes/rst.tmLanguage.json#L284

语法规则 (domain-cpp) 捕获一段文本,然后将其中的一部分标记为 C/C++ 源代码 (source.cpp)。

然后 VSCode 足够聪明,可以使用 C/C++ 语法突出显示该嵌入部分,并且您不需要 project.json.[=15= 中的 embeddedLanguages ]