VSCode настроить подсветку синтаксиса в соответствии с руководством по стилю
Как изменить подсветку синтаксиса в VSCode, чтобы он соответствовал определенному руководству по стилю? Например, я хочу придерживаться руководства по стилю Google C++, где переменные-члены записываются как some_member_variable_
, Когда я использую это соглашение, VSCode не окрашивает это имя в отличие от стандартного текста. Но у меня есть код, который использует mSomeMemberVariable
соглашение, и это окрашивается по-другому, чем другой текст. Есть ли способ настроить это лучше?
1 ответ
TL; DR > Нет простого способа применить подсветку синтаксиса в стиле Google, если вы не найдете для него существующий файл грамматики cpp Textmate (я не смог его найти). Однако, вот как вы бы это реализовали сами.
Глядя на файл синтаксиса 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
файл.
Ниже приведено более подробное объяснение. Отсюда мы видим:
Для подсветки синтаксиса есть два компонента:
- Разбиение текста на список токенов и областей с использованием грамматики
- Затем с помощью темы сопоставьте эти области с определенными цветами и стилями.
Для начала нам нужно выяснить, какая "область видимости" стилизует переменную-член:
- Палитра команд>
ctrl+shift+p
>Developer: Inspect TM Scopes
- Нажмите на имя переменной члена (
mSomeMemberVariable
) - Наиболее конкретная область - самая верхняя запись. На момент публикации это называется
variable.other.readwrite.member.cpp
.cpp
часть имени говорит нам, что область действия определена в грамматике C++ (синтаксис). Файл, используемый для синтаксиса cpp, можно найти в extensions/cpp/syntaxes/cpp.tmLanguage.json
(в репозитории github).
Ища имя области в файле определения синтаксиса, мы находим следующий шаблон:
{
"match": "\\b(f|m)[A-Z]\\w*\\b",
"name": "variable.other.readwrite.member.cpp"
}
И чтобы увидеть, какой стиль применяется к вышеупомянутой области, мы смотрим на соответствующую тему *.json
файл. Например, если вы используете тему Dark+ (по умолчанию темная), вы можете найти файл json темы по адресу extensions/theme-defaults/themes/dark_plus.json
, В этом файле мы находим следующее правило темы text mate:
{
"name": "Variable and parameter name",
"scope": [
"variable",
"meta.definition.variable.name",
"support.variable",
"entity.name.variable"
],
"settings": {
"foreground": "#9CDCFE"
}
}
Из этого правила мы видим, что выделение применяется variable
объем. (обратите внимание, что все стили внешней области видимости применяются к внутренним, если вы не указали стиль внутренней области видимости, чтобы переопределить его)
Теперь один вариант для вас будет добавить вашу собственную область в существующий файл. Другой вариант - отредактировать существующую область видимости, чтобы она также соответствовала шаблону регулярных выражений переменных в стиле Google. Еще один вариант - определить собственную грамматику на основе файла стиля расширения CPP и создать собственное расширение Google CPP VSCode. Например, используя первый подход, вы можете редактировать cpp.tmLanguage.json
следующее:
{
"match": "\\b([a-z][a-z\\d]*_)+\\b",
"name": "variable.other.readwrite.member.google.cpp"
}
PS Для меня файл синтаксиса cpp был на [my_applications_folder]/code/resources/app/extensions/cpp/syntaxes/cpp.tmLanguage.json
, Таким образом, вы также можете отредактировать этот файл и перезапустить VSCode вместо того, чтобы перестраивать его из репозитория git.