Настройка подсветки синтаксиса в коде Visual Studio

В настоящее время я пытаюсь написать расширение для нового типа файла (ANTLR) и задаться вопросом, как изменить цвета, используемые для выделения синтаксиса в коде Visual Studio. Для меня это выглядит так, как будто это не определено в расширении, но где-то еще. Для цветов нет предпочтений, и я не нашел CSS файл, который определяет это (чего я ожидаю, поскольку vscode использует Electron). Я также просмотрел файл настроек vscode сгенерированный и файлы, которые пришли с ним, но не знаю. Также не помогли веб-поиски. Итак, я сейчас потерян.

Может кто-нибудь дать мне несколько советов или указать мне на соответствующие документы?

Ответ 1

Немного опоздал на вечеринку, но я добавлю это сюда, чтобы сэкономить следующему парню несколько часов поиска.

Здесь действуют две концепции:

  • языковые грамматики, которые превращают текстовый файл в токены с различными областями действия, и
  • темы, которые окрашивают эти области (надеюсь) приятным для глаз способом.

Если вы пишете свою собственную грамматику или конвертируете из TextMate и т.д., Есть вероятность, что вы используете области, отличные от определенных в теме. В этом случае не будет четкого различия между токенами, которые вы определяете, даже если они действительно определены.

Есть два выхода из этого. Во-первых, расширьте тему с помощью пользовательских областей и раскрасьте их по своему желанию. Не очень хороший путь, если только всем, кто использует ваш язык, также не нравится ваша цветовая схема. Другой - использовать (ограниченный набор) областей, уже определенных и раскрашенных VSCode и авторами темы. Скорее всего, ваш язык будет хорошо выглядеть в выбранной вами теме и достаточно хорош в других.

Чтобы дать вам пример, здесь область comment как определено темной темой VSCode по умолчанию.

"name": "Dark Visual Studio",
"settings": [
    {
        "scope": "comment",
        "settings": {
            "foreground": "#608b4e"
        }
    },

а здесь эквивалентный фрагмент языка из грамматики C++:

"comments": {
    "patterns": [
        {
            "captures": {
                "0": {
                    "name": "punctuation.definition.comment.java"
                }
            },
            "match": "/\\*\\*/",
            "name": "comment.block.empty.java"
        },

По сути, язык определяет несколько токенов в comment мере необходимости, и поскольку тема говорит, что comment.* Будет зеленого цвета, все они будут окрашены одинаково.

Ответ 2

Правила выделения синтаксиса хранятся в файлах .plist (или, альтернативно, в файлах .tmLanguage). В этих файлах для подсветки синтаксиса объявляются разные типы токенов:

  • Что такое ключевое слово?
  • Что такое строковый литерал?
  • Что такое комментарий?
  • и др.

Взгляните сюда, чтобы получить дополнительную информацию об этом: https://code.visualstudio.com/Docs/customization/colorizer

Вы не определяете цвета в файлах .plist!

Отношение между типами токенов и цветами выполняется в объявлениях цветовой темы.

Подробнее об этом здесь https://code.visualstudio.com/Docs/customization/themes и здесь Как добавить тему в код Visual Studio?

В целом этот документ также полезен, когда вы пытаетесь расширить VSCode: https://code.visualstudio.com/docs/extensionAPI/overview

Ответ 3

Нет необходимости патчить тему, из официальной документации:

Чтобы настроить цвета подсветки синтаксиса редактора, используйте editor.tokenColorCustomizations в файле настроек пользователя settings.json

Помимо простой настройки токена, вы можете полностью переопределить правила TextMate с помощью немного более сложной настройки, например:

"editor.tokenColorCustomizations": {"textMateRules": [{
        "scope": "keyword.control.ref.latex",
        "settings": {
            "foreground": "#FF0000"
        }
    }]}