代码之家  ›  专栏  ›  技术社区  ›  CalamityAdam

visualstudio代码-语法的意义突出显示颜色

  •  2
  • CalamityAdam  · 技术社区  · 7 年前

    我为此搜索了一段时间,但没有找到任何参考指南或词汇表/索引列出颜色和含义。不知道这是否重要,但我只是用JavaScript编写。

    编辑:我已经包括了一个屏幕截图的类型的语法突出显示我所指的。

    syntax highlighting

    0 回复  |  直到 7 年前
        1
  •  2
  •   Scott McPeak    5 年前

    语法突出显示颜色的含义分为两部分:

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

    将文本分区为标记

    第一部分由VSCode中内置的语法描述决定。VSCode使用基于 TextMate grammars JavaScript.tmLanguage.json ),但在这种形式下,经过了几个后处理阶段,几乎无法阅读。没有文档说明这些语法文件的意图。它们倾向于至少大致遵循相关的语言规范,但也有许多特殊的偏差。

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

    例子:

    Screenshot of the TM Scope Inspector

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

    在VSCode中,范围标签序列最接近于令牌的“含义”。

    接下来,是将范围标签序列映射到颜色和字体样式的过程。这是由主题完成的。在我的例子中,我使用的是在中的VSCode源中定义的visualstudio Light light_vs.json . 如果 返回

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

    基本上说,任何一个范围标签都以关键字.control“应该是蓝色的。但是其他的碎片可能会覆盖这个;这个 rules 有点复杂。为什么是蓝色?这是一个武断的审美选择。

    为什么 function NaN 有相同的颜色吗?语法为它们分配不同的范围标签( storage.type.function.js constant.language.nan.js

    自定义颜色

    你没有问,但一个明显的后续问题是如何定制这些颜色,例如 this answer .