【问题标题】:Visual Studio Code Language Extension Inherit ExistingVisual Studio Code 语言扩展继承现有
【发布时间】:2018-12-28 06:17:59
【问题描述】:

在 Visual Studio Code 中,只需提供一个语法文件,例如,添加您自己的语言扩展相对容易。通过 JSON。

我想为我使用的特定脚本语言提供一个语法文件。脚本语言嵌入在 ARM 汇编源代码中,已经存在一个插件。所以我基本上想通过我的脚本语言来扩展 ARM 扩展。目前可以吗?

在我的情况下,这将是 IMO 的方式,因为如果我只是复制现有的扩展(这是 MIT 许可的),我实际上会创建一个硬分叉,我不打算这样做。

【问题讨论】:

    标签: typescript visual-studio-code vscode-extensions


    【解决方案1】:

    1。注射

    您可以通过将以下内容添加到您的package.json 来将您的语言扩展注入父范围的范围:

    "contributes": {
        "grammars": [
            {
                "scopeName": "source.asm.x86_64.your_syntax_extension",
                "path": "./syntaxes/your_syntax_extension.json",
                "injectTo": [ "source.asm.x86_64" ]
            }
        ]
    }
    

    2。包括

    如果您的语言扩展使用自定义文件类型,或者您想覆盖某些父范围的语法定义,您可以编写自己的定义并包含父范围。您可以使用以下任一格式:

    your_syntax_extension.json

    {
      "fileTypes": [
        "myExtension"
      ],
      "name": "Your Syntax Extension",
      "patterns": [
        {
          "include": "source.asm.x86_64"
        }
      ],
      "scopeName": "source.asm.x86_64.your_syntax_extension"
    }
    

    your_syntax_extension.tmLanguage

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>fileTypes</key>
        <array>
            <string>myExtension</string>
        </array>
        <key>name</key>
        <string>Your Syntax Extension</string>
        <key>patterns</key>
        <array>
            <dict>
                <key>include</key>
                <string>source.asm.x86_64</string>
            </dict>
        </array>
        <key>scopeName</key>
        <string>source.asm.x86_64.your_syntax_extension</string>
    </dict>
    </plist>
    

    在这两种情况下,您可能都希望将扩展包作为依赖项包含在内。为此,请将其唯一标识符添加到您的 package.json

    "extensionDependencies": [
        "13xforever.language-x86-64-assembly"
    ]
    

    【讨论】:

    • 感谢您的解释,我想补充一点,我必须在我的语法配置 JSON 中添加 ` "injectionSelector": "L:source",` 才能使注入工作.我还向另一个扩展添加了依赖项,但至少在开发主机 VS Code 中似乎忽略了它。仅当扩展程序发布到商店或安装到非开发主机时才会强制执行该约束?无论如何,我接受了你的回答,因为这绝对是要走的路。
    • 我添加了一个 extensionDependencies 到一个没有并且 VSCode 没有安装它的包中。不过,我可以向您保证,它适用于我发布的软件包。
    猜你喜欢
    • 2018-07-21
    • 2018-08-23
    • 1970-01-01
    • 2019-01-25
    • 2021-11-22
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多