Visual Studio 代码 - 语法高亮颜色的含义

Visual Studio Code - meaning of syntax highlight colors

我正在寻找有关 Visual Studio 代码中语法突出显示的每种颜色的实际含义的参考。我目前使用的是深色默认主题 Dark+。我已经习惯了识别一些突出显示的颜色,并且了解了我正在查看的内容的要点,但我正在寻找有关每种颜色含义的更​​详细的参考。 我为此搜索了一段时间,但找不到任何参考指南或 glossary/index 列出颜色和含义。不确定这是否重要,但我只写 JavaScript。 提前谢谢你。

编辑:我附上了我所指的语法高亮类型的屏幕截图。

语法高亮颜色的含义分为两部分:

  1. 文件中的字符是如何组织成有意义的标记的?
  2. 如何为这些标记分配特定的颜色和字体样式?

将文本分割成标记

第一部分由 VSCode 内置的语法描述决定。 VSCode 使用基于 TextMate grammars. The grammars are defined in the VSCode sources (e.g., JavaScript.tmLanguage.json) 的系统,但在这种形式下经过了几个后期处理阶段,使它们几乎不可读。没有关于这些语法文件的意图的文档。他们倾向于至少大致遵循相关的语言规范,但有很多特别的偏差。

了解定义了哪些标记的最实用方法是使用命令面板 (Ctrl+Shift+P) 中提供的“开发人员:检查 TM 范围”工具。当您将光标放在标记上时,它会显示描述该标记的“范围标签”。这些标签或多或少是人类可读的。

编辑 2020-07-24:从 VSCode 1.47(可能更早一点)开始,该命令称为“开发人员:检查编辑器令牌和作用域” .

示例:

在上面,我们可以看到 return 关键字最具体地分类为 keyword.control.flow.js。它位于大括号括起的代码块 (meta.block.js)、函数定义 (meta.function.js) 和 Javascript 源代码 (source.js) 内。

该范围标签序列是最接近 VSCode 中标记的“含义”的东西。

为标记分配颜色

接下来是将范围标签序列映射到颜色和字体样式的过程。这是由主题完成的。在我的例子中,我使用 Visual Studio Light,在 light_vs.json 的 VSCode 源中定义。在 return 关键字的情况下,这是适用的片段:

        {
            "scope": "keyword.control",
            "settings": {
                "foreground": "#0000ff"
            }
        },

基本上,范围标签以“keyword.control”开头的任何内容都应为蓝色。但是其他片段可能会覆盖这个; rules 有点复杂。为什么是蓝色?这是一个任意的审美选择。

为什么functionNaN颜色一样?语法为它们分配了不同的范围标签(storage.type.function.jsconstant.language.nan.js),但恰好您使用的主题 (Dark+) 为它们分配了相同的颜色(就像我的一样)。我觉得这个选择很奇怪,但只能推测原因。

自定义颜色

你没有问,但一个明显的后续问题是如何自定义这些颜色,例如给 functionNaN 不同的颜色。参见 this answer