如何为现有语言添加额外的语法高亮显示?

How do I add extra syntax highlighting to an existing language?

我想添加一些额外的语言功能,例如内部的液体语言支持JavaScript:

var firstName = "<% User.firstName %>";
var lastName = "<% User.firstName %>";

我浏览了一下,在 vscode 存储库中找到了这个文件夹:https://github.com/microsoft/vscode/tree/main/extensions/javascript

基本上是 JavaScript tmLanguage 语法规则,所以我想创建一个新的 javascript 文件格式 (.pjs) 并应用相同的 tmLanguage 文件并添加这些新规则:

    "pk-liquid-expression": {
        "begin": "<%",
        "beginCaptures": {
            "0": {
                "name": "storage.type.primitive.java"
            }
        },
        "end": "%>",
        "endCaptures": {
            "0": {
                "name": "storage.type.primitive.java"
            }
        },
        "name": "storage.type.primitive.java"
    },

这很有效,但是现在我的 pjs 文件没有任何语言功能,例如错误和警告。

但是我认为我的解决方案不是很有前瞻性,所以是否可以只编辑当前的 JavaScript tmLanguage 规则并添加这些新标记?

谢谢。

一个解决方案是inject将“液体语言”转化为Javascript语言定义。主要步骤是定义要注入的语法并创建一个选择器来定义何时注入语法:

{
  "contributes": {
    "grammars": [
      {
        "path": "./syntaxes/injection.json",
        "scopeName": "todo-comment.injection",
        "injectTo": ["source.js"]
      }
    ]
  }
}

另请参阅: