我正在尝试编写语法语法,但是在尝试在块注释后正确确定文本范围时遇到问题:
/*
block comment
*/ troublesome text
对于以下“模式”,troublesome text
的范围为invalid.illegal.mircscript
,comment.block.mircscript
的范围应为invalid.illegal.mircscript
{
"name": "comment.block.mircscript",
"begin": "^\\x20*/\\*",
"end": "^\\x20*\\*/(\\x20*\\S.*$)?"
"endCaptures": {
"1": { "name": "invalid.illegal.mircscript" }
}
}
但是如果我分割模式,troublesome text
根本就不会匹配/作用域:
{
"patterns": [
{
"name": "comment.block.mircscript",
"begin": "^\\x20*/\\*",
"end": "^\\x20*\\*/"
},
{
"name": "invalid.illegal.mircscript",
"match": "\\G(?<=\\*/)\\x20*\\S.*$"
}
]
}
我该如何从comment.block.mircscript
中排除尾随文本,同时仍然在块注释后直接匹配以将其限定在invalid.illegal.mircscript
范围内?
答案 0 :(得分:0)
范围界定是因为您的整个规则都有"name": "comment.block.mircscript"
,所以它匹配的所有内容(包括开始/结束)都将具有该范围。
为避免这种情况,您可以省略顶层name
,而在明确contentName
和begin
捕获范围的情况下使用end
:
{
"contentName": "comment.block.mircscript",
"begin": "^\\x20*/\\*",
"beginCaptures": {
"0": "comment.block.mircscript.begin"
},
"end": "(^\\x20*\\*/)(\\x20*\\S.*$)?"
"endCaptures": {
"1": { "name": "comment.block.mircscript.end" },
"2": { "name": "invalid.illegal.mircscript" }
}
}
contentName
仅设置在开始/结束规则内部匹配的内容的范围,而排除开始/结束匹配本身