在Visual Studio Code中,只需提供一个语法文件(例如,通过JSON)就可以相对容易地添加自己的语言扩展。我想为我使用的特定脚本语言提供一个语法文件。该脚本语言嵌入在ARM汇编源代码中,而这已经存在一个插件。因此,我基本上想通过我的脚本语言扩展ARM Extension。目前是否可能实现这一点?在我看来,这将是我处理的方式,因为如果我只复制现有的扩展(它是MIT许可),我将事实上创建一个硬分叉,这不是我的意图。
您可以通过将以下内容添加到package.json
中来将语言扩展注入到父作用域的范围内:
"contributes": {
"grammars": [
{
"scopeName": "source.asm.x86_64.your_syntax_extension",
"path": "./syntaxes/your_syntax_extension.json",
"injectTo": [ "source.asm.x86_64" ]
}
]
}
如果您的语言扩展使用自定义文件类型或者您想要覆盖一些父级作用域的语法定义,您可以编写自己的定义并包含父级作用域。您可以使用以下任意一种格式:
{
"fileTypes": [
"myExtension"
],
"name": "Your Syntax Extension",
"patterns": [
{
"include": "source.asm.x86_64"
}
],
"scopeName": "source.asm.x86_64.your_syntax_extension"
}
<?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
中:
在两种情况下,您可能希望将扩展程序包包含为依赖项。要这样做,请将其唯一标识符添加到您的package.json
中:
"extensionDependencies": [
"13xforever.language-x86-64-assembly"
]
"injectionSelector": "L:source"
。我还添加了另一个扩展的依赖项,但至少在开发主机VS Code中似乎被忽略了。这个限制只有在扩展程序发布到商店或安装到非开发主机上时才会被强制执行吗?无论如何,我接受了您的答案,因为那绝对是正确的方法。 - KarathanextensionDependencies
的包添加了它,但是 VSCode 没有安装它。不过,我可以向您保证它对我的已发布的包有效。 - idleberg