下面是前言。说明此问题的演示项目可在以下位置找到:https://github.com/kirksl/so60384141
我可以在原生VSCode语言中引用注入语法
指定此(package.json)
"grammars":
[
{
"scopeName": "source.js.mylang",
"path": "./syntaxes/mylang-js.tmLanguage.json",
"injectTo": ["source.js"]
}
]和这个(./syntaxes/mylang-js.tmLanguage.json)
{
"scopeName": "source.js.mylang",
"injectionSelector": "L:source",
"patterns": [
{
"include": "#todo-keyword"
}
],
"repository": {
"todo-keyword": {
"match": "TODO",
"name": "keyword.todo"
}
}
}我看到了这个(.js文件,原生JS)

到目前一切尚好。
然而,我似乎不能在我的自定义语言中引用相同的注入语法,如下所述。带有三重引号的围栏代码块应该利用它。
更新,现在,这个(package.json)
"languages": [
{
"id": "mylang",
"aliases": ["Mylang", "mylang"],
"extensions": [".mylang"],
"configuration": "./language-configuration.json"
}
],
"grammars":
[
{
"language": "mylang",
"scopeName": "source.mylang",
"path": "./syntaxes/mylang.tmLanguage.json",
"embeddedLanguages": {
"meta.embedded.block.javascript": "javascript"
}
},
{
"scopeName": "source.js.mylang",
"path": "./syntaxes/mylang-js.tmLanguage.json",
"injectTo": ["source.js"]
}
]并另外指定(./syntaxes/mylang-js.tmLanguage.json)
"fenced-expression": {
"begin": "(^|\\G)\\s*[\"]{3}\\s*$",
"end": "(^|\\G)\\s*[\"]{3}\\s*$",
"contentName": "meta.embedded.block",
"beginCaptures": {
"0": {
"name": "string.quoted.triple.mylang"
}
},
"endCaptures": {
"0": {
"name": "string.quoted.triple.mylang"
}
},
"patterns": [
{
"begin": "^(\\s*)(?=[\\S&&[^{<\\[]])",
"while": "^(?!\\s*[\"]{3}\\s*)",
"contentName": "meta.embedded.block.javascript",
"patterns": [
{
"include": "source.js"
}
]
}
]
}我看到了这个(.mylang文件,JS突出显示,TODO未突出显示)

最后,我只展示了一些管道,以便能够高亮显示我正在寻找的内容
如果我将"include": "source.js"切换到"include": "source.js.mylang"
"fenced-expression": {
"begin": "(^|\\G)\\s*[\"]{3}\\s*$",
"end": "(^|\\G)\\s*[\"]{3}\\s*$",
"contentName": "meta.embedded.block",
"beginCaptures": {
"0": {
"name": "string.quoted.triple.mylang"
}
},
"endCaptures": {
"0": {
"name": "string.quoted.triple.mylang"
}
},
"patterns": [
{
"begin": "^(\\s*)(?=[\\S&&[^{<\\[]])",
"while": "^(?!\\s*[\"]{3}\\s*)",
"contentName": "meta.embedded.block.javascript",
"patterns": [
{
"include": "source.js.mylang"
}
]
}
]
}我看到了这个(.mylang文件,JS没有突出显示,TODO突出显示)

发布于 2020-02-26 03:38:09
您还需要将mylang-js.tmLanguage.json注入到source.mylang中(injectTo仅适用于顶级作用域名称,请参阅解释here):
{
"scopeName": "source.js.mylang",
"path": "./syntaxes/mylang-js.tmLanguage.json",
"injectTo": ["source.js", "source.mylang"]
}然后它看起来就像预期的那样工作:

此外,您还必须调整injectionSelector,以确保TODO突出显示仅应用于嵌入式JS块的注释中:
"injectionSelector": "L:comment.line.double-slash.js"https://stackoverflow.com/questions/60384141
复制相似问题