【问题标题】:How to prioritize rules in VS Code language extensions如何在 VS Code 语言扩展中优先考虑规则
【发布时间】: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


    【解决方案1】:

    在您的情况下,一个简单的解决方案是确保三个 begin 正则表达式是互斥的。例如,您可以按如下方式更改存储库模式:

        "magicString": {
            "name": "comment.magic.lang",
            "begin": ";!",
            "end": "\n"
        },
        "commentHeader": {
            "name": "comment.header.lang",
            "begin": ";;",
            "end": "\n"
        },
        "comments": {
            "name": "comment.lang",
            "begin": ";[^;!]",
            "end": "\n"
        }
    

    注意comments 的正则表达式:;[^;!] 表示“后面没有;! 字符的; 字符”

    (上述 sn-p 中范围名称的更改与您的问题没有直接关系。这只是我对什么被认为是更好的做法的印象,尽管我警告说我是 TextMate 的完整初学者。)

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 1970-01-01
      • 2021-03-26
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多