VSCode配置语法突出显示以匹配样式指南

时间:2019-02-21 17:12:28

标签: c++ visual-studio-code syntax-highlighting google-style-guide

如何更改VSCode中的语法突出显示,使其遵循特定的样式指南?例如,我要坚持使用Google C++ style guide,其中成员变量写为some_member_variable_。当我使用此约定时,VSCode不会使用与标准文本不同的颜色来命名该名称。但是我有一些使用mSomeMemberVariable约定的代码,并且确实的颜色不同于其他文本。有没有更好的配置方法?

1 个答案:

答案 0 :(得分:1)

TL; DR >除非您为它找到了一个现有的cpp Textmate语法文件(我找不到一个),否则没有简单的方法来应用Google样式语法突出显示。但是,下面是您自己实现它的方法。

查看CPP语法文件(cpp.tmLanguage.json),我们发现没有范围模式捕获Google样式的成员变量。您可以添加一个:

{ // this is the existing scope that matches mSomeMemberVariable
    "match": "\\b(f|m)[A-Z]\\w*\\b",
    "name": "variable.other.readwrite.member.cpp"
},
{ // you can add this scope to match some_member_variable_
    "match": "\\b([a-z][a-z\\d]*_)+\\b",
    "name": "variable.other.readwrite.member.google.cpp"
}

现在,您可以通过确保其范围(或任何外部范围,例如variable.other.readwrite.member)在主题的.json文件中具有主题规则来确保其样式。


以下是更详细的说明。从here中我们看到:

  

语法突出显示有两个组成部分:

     
      
  • 使用语法将文本分为标记和作用域列表
  •   
  • 然后使用主题将这些范围映射到特定的颜色和样式
  •   

首先,我们需要确定哪个“作用域”为成员变量设置样式:

  • 命令面板> ctrl+shift+p> Developer: Inspect TM Scopes
  • 单击成员变量名称(mSomeMemberVariable
  • 最具体的范围是最上面的条目。截至本文发布之日,它被称为variable.other.readwrite.member.cpp

名称的.cpp部分告诉我们范围是在C ++语法(语法)中定义的。可以在extensions/cpp/syntaxes/cpp.tmLanguage.json(在the github repo中)下找到用于cpp语法的文件。

在语法定义文件中搜索作用域名称,我们发现以下模式:

{
    "match": "\\b(f|m)[A-Z]\\w*\\b",
    "name": "variable.other.readwrite.member.cpp"
}

要查看将哪种样式应用于上述范围,我们看一下相应的主题*.json文件。例如,如果您使用 Dark +(默认为黑暗)主题,则可以在extensions/theme-defaults/themes/dark_plus.json找到主题json文件。在此文件中,我们找到以下文本配合主题规则:

{
    "name": "Variable and parameter name",
    "scope": [
        "variable",
        "meta.definition.variable.name",
        "support.variable",
        "entity.name.variable"
    ],
    "settings": {
        "foreground": "#9CDCFE"
    }
}

根据此规则,我们看到突出显示由variable范围应用。 (请注意,除非您专门指定内部范围样式以覆盖它,否则所有外部范围样式都将应用于内部样式)
现在,您的一种选择是将自己的范围添加到现有文件中。另一方法是编辑现有范围,使其也与Google样式成员变量regex模式匹配。另一个选择是根据CPP扩展样式文件定义自己的语法,并创建自己的Google CPP VSCode扩展。例如,采用第一种方法,您可以按以下方式编辑cpp.tmLanguage.json

{
    "match": "\\b([a-z][a-z\\d]*_)+\\b",
    "name": "variable.other.readwrite.member.google.cpp"
}

P.S。对我而言,cpp语法文件位于[my_applications_folder]/code/resources/app/extensions/cpp/syntaxes/cpp.tmLanguage.json。因此,您也可以编辑此文件并重新启动VSCode,而不用从git存储库中重建它。