Как добавить простой синтаксис в VSCode?
Я бы хотел добавить простейшую из возможных (mvp) грамматику языка и подсветку синтаксиса в vscode.
Это (IMO) беспорядок документов TextMate (применяются две разные версии) и случайные советы в Интернете. Я не могу сделать базовый пример работы или найти его.
Как бы я добавил грамматику языка только с одним правилом (например: трактовать "foo" как
mylang.symbol.foo
), а какое правило раскраски влияет на этот символ?
1 ответ
Файл грамматики должен быть объявлен в 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.