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

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

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

2 ответа

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

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

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

Если вы пишете свою собственную грамматику или конвертируете из 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.* будет зеленым, все они будут окрашены одинаково.

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

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

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

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

Правила подсветки синтаксиса хранятся в .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

Вы можете рассмотреть возможность использования цветовой темы

Начиная с VSCode 1.44 (март 2020 г.) у вас теперь есть

Поддержка тем для семантических токенов

Цветовые темы теперь могут писать правила для цветных семантических маркеров, сообщаемых языковыми расширениями, такими как TypeScript.

"semanticHighlighting": true,
"semanticTokenColors": {
    "variable.declaration.readonly:java": { "foreground": "#00ff00" "fontStyle": "bold" }
}

Приведенное выше правило определяет, что все объявления переменных только для чтения в Java должны быть окрашены в жадный и полужирный цвета.

См. Дополнительную информацию на странице Wiki Semantic Highlighting.

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