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