VS Code 扩展:设置自定义语义标记颜色

mha*_*tzl 4 syntax-highlighting visual-studio-code vscode-extensions

是否可以在扩展内修改从 LSP 接收的语义标记修饰符的样式,而无需创建自定义主题?

我可以editor.semanticTokenColorCustomizations在我的settings.json文件中使用并添加我想要的自定义规则,但此设置不适用于VS Code 扩展的文件configurationDefaultspackage.json

因此,以下代码片段在 中有效,而对于该字段下的扩展settings.json则不起作用。package.jsonconfigurationDefaults

"editor.semanticTokenColorCustomizations": {
  "enabled": true,
  "rules": {
    "*.declaration": {
      "bold": true
    },
    "*.definition": {
      "italic": true
    },
    "*.readonly": "#ff0000"
  }
}
Run Code Online (Sandbox Code Playgroud)

还有别的办法吗?

理想情况下,我想更改我通过扩展引入的语言的标记类型和标记修饰符,但我不想创建用户需要使用的自定义主题来获得正确的突出显示。

注意:我被迫坚持使用 Microsoft 提供的语言客户端支持的令牌类型和修饰符。这些在LSP 规范中定义。

编辑:我使用带有语义标记的 LSP 来获取文件的标记类型和修饰符。这应该类似于使用 TextMate 语法。我遇到的问题是对这些标记应用正确的样式/突出显示。由于语言客户端限制了可用的标记,因此我在我的语言的标记和默认 LSP 标记之间应用了映射。

含义:标记修饰符declaration实际上bold在我的标记语言中

小智 5

您可以引入所有自定义语义标记,而无需将自己限制为内置标记。我个人更喜欢官方示例文件中提出的方式: semantic-tokens-sample

至于样式,您可以轻松修改扩展,包括。通过 package.json 文件的语义标记颜色如下。

{
    ...
    "editor.semanticHighlighting.enabled": true, // not necessary, just make sure it is not disabled
    "contributes": {
        "semanticTokenTypes": [ // not necessary if you use own parsing with "DocumentSemanticTokensProvider"
            {
                "id": "myToken",
                "superType": "myToken",
                "description": "myToken"
            }
        ],
        "configurationDefaults": {
            "editor.semanticTokenColorCustomizations": {
                "rules": {
                    "comment": "#969896",
                    "string": "#B5BD68",
                    "myToken": "#323232" // custom
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为此,我亲自在 extension.ts 文件的图例中引入了 myToken。

要检查您的语义标记逻辑是否正常工作,您可以使用 [查看/命令面板/>开发人员:检查编辑器标记和范围]功能,该功能将显示附加到您的关键字的语义范围(如果有)。

如果提供的代码不适合您,请检查您的 package.json 并确保语言设置全部正确:可能与您相关的设置:

{
    ...
    "activationEvents": ["onLanguage:myLanguage"], // make sure your extension is activated
    "contributes": {"languages": [{"id": "myLanguage", "extensions": [".myLang"], "configuration": "./language-configuration.json"}]}
}
Run Code Online (Sandbox Code Playgroud)

此外,检查您的用户/工作空间设置是否干扰您的 package.json 设置。