Как добавить простой синтаксис в 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.

Другие вопросы по тегам