【问题标题】:Embedding Language Syntax in Visual Studio Code Extension在 Visual Studio 代码扩展中嵌入语言语法
【发布时间】:2022-01-15 14:32:58
【问题描述】:

我正在尝试让 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# 的乐趣。我将打开另一个问题。

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

    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 中的 embeddedLanguages

    【讨论】:

    • 谢谢,看起来可能是 csharp 由于某种原因无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2018-08-23
    • 2018-07-21
    • 2018-12-28
    • 1970-01-01
    • 2023-02-04
    • 2010-09-20
    • 2011-08-16
    相关资源
    最近更新 更多