Файл грамматики должен быть объявлен в разделе contributes.grammars
в package.json
, здесь приведен пример языка foo
. Поскольку VSCode еще не знает языков с таким идентификатором, нам также необходимо зарегистрировать новый идентификатор языка здесь:
{
// ...
"contributes": {
"grammars": [
{
"language": "foo",
"scopeName": "source.foo",
"path": "grammar.json"
}
],
"languages": [
{
"id": "foo",
"extensions": ["foo"]
}
]
}
}
grammar.json
выглядит так:
{
"scopeName": "source.foo",
"patterns": [
{
"match": "foo",
"name": "mylang.symbol.foo"
}
]
}
Команда Developer: Inspect TM Scopes
подтверждает, что это работает должным образом:
Чтобы mylang.symbol.foo
был окрашен определенным образом, расширение также должно добавить тему в package.json
:
{
// ...
"contributes": {
// ...
"themes": [
{
"label": "foo",
"id": "foo",
"uiTheme": "vs-dark",
"path": "theme.json"
}
]
}
}
С theme.json
выглядит так:
{
"$schema": "vscode://schemas/color-theme",
"name": "Foo Theme",
"tokenColors": [
{
"scope": "mylang.symbol.foo",
"settings": {
"foreground": "#FF0000"
}
}
]
}
После выбора темы с помощью команды Preferences: Color Theme
слово foo
будет окрашено в красный цвет (а bar
- нет):
Практически все это также должно быть включено в официальные документы VSCode по Подсветка синтаксиса и Цветовые темы , но более подробно.
Кстати, вместо JSON VSCode также поддерживает грамматики TmLanguage в формате XML / plist из коробки, но я считаю, что первая имеет тенденцию быть более читабельной. И на самом деле, наиболее читаемый формат для грамматик TmLanguage, по моему мнению, это YAML, поскольку они в основном состоят из регулярных выражений и их не нужно экранировать. Однако для этого требуется шаг преобразования из YAML в JSON или XML для VSCode.