【发布时间】:2021-05-28 20:21:44
【问题描述】:
我正在尝试为 VS Code 创建语言扩展。该语言中的 cmets 是单行 cmets,以分号开头,像这样
command ;comment
为此,我将以下内容放入我的 tmLanguage.json 的存储库部分:
"comments": {
"name": "comment.lang",
"begin": ";",
"end": "\n"
}
并将其包含在模式部分中
{
"include": "#comments"
}
到目前为止,这是可行的。现在最重要的是,该语言还具有特殊的块,以“;!”开头与 ”;;”分别。那些我想被区别对待的人:
"magicString": {
"name": "magicString.lang",
"begin": ";!",
"end": "\n"
},
"commentHeader": {
"name": "commentHeader.lang",
"begin": ";;",
"end": "\n"
},
再次,我将它们包含在模式部分中
{
"include": "#magicString"
},
{
"include": "#commentHeader"
}
现在明显的问题是这两个开始完全像一个评论。因此,它们似乎被识别并视为 cmets。范围检查器确认标记确实被处理为“comment.lang”。
我该如何解决这个问题?有没有办法将一条规则优先于另一条规则?我在TextMate documentation 中查找了该主题,但我不明白。我尝试在begin 正则表达式中指定分号重复的次数——我认为这应该有效,但它没有。
"magicString": {
"name": "magicString.lang",
"begin": ";!",
"end": "\n"
},
"commentHeader": {
"name": "commentHeader.lang",
"begin": ";{2}",
"end": "\n"
},
"comments": {
"name": "comment.lang",
"begin": ";{1}",
"end": "\n"
}
【问题讨论】:
标签: visual-studio-code vscode-extensions textmate