我使用自定义环境,我们的构建系统使用特定的宏来更改输出的JS文件。 当我使用VSCode时,它似乎并不喜欢这种语法,并且这使得它的编码真的很烦人,因为在大多数情况下它还会打破进一步的语法高亮。
自定义语法为{{custom}}
。 custom
可以是几件事,起初我喜欢vscode只是将整个宏语法识别为一个字符串,所以它不会搞砸任何东西。最后,我想自定义宏的内部,所以我可以突出显示它。
我已经尝试在网上搜索解决方案,然后扩展以获得解决方案,但是没有成功,目前我最接近的是,直接编辑javascript tmLanguange文件并在语句中添加以下内容:
"mystring-double": {
"name": "string.template.js",
"begin": "([_$[:alpha:]][_$[:alnum:]]*)?({{)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.js"
},
"2": {
"name": "punctuation.definition.string.template.begin.js"
}
},
"end": "}}",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.template.end.js"
}
},
"patterns": [
{
"include": "#string-character-escape"
}
]
}
并将字符串语句更改为以下内容:
"string": {
"patterns": [
{
"include": "#qstring-single"
},
{
"include": "#qstring-double"
},
{
"include": "#mystring-double"
}
]
},
这非常hacky,但仍然很难实现我想做的事情。 目前代码看起来像我的更改:
从截图中看起来它根本不起作用,但实际上它确实在某些情况下,在其他一些中断语法突出显示,我总是在宏上看到错误。
任何关于我如何进行扩展以做我想做的事情的帮助都会非常感激!
答案 0 :(得分:2)
您应该可以使用grammar injection来实现此目的。例如,看看lit-html extension如何注入对字符串的支持,如:
const myHtml = html`<br>`
编写注入语法需要两个文件:the grammar itself和package.json contribution
我相信你可能需要两次注射,一次用于像a === {{bla}}
这样的表达式,另一次用于像"{{bla}}"
这样的字符串内的表达式。第一种情况与lit-html的情况非常相似,而对于第二种情况,您的注射选择器将类似于"injectionSelector": "L:source.string"