#visual-studio-code #vscode-extensions
Вопрос:
В настоящее время я пытаюсь разработать расширение VSCode, которое обеспечивает поддержку нового языка. Статическая подсветка синтаксиса должна обеспечиваться файлом TextMate, дополнительная семантическая подсветка-языковым сервером. Оба они используют — на данный момент — пользовательские типы токенов. Языковой сервер прекрасно работает с Monaco и соответствующей спецификацией синтаксиса Monarch. С помощью Monaco я могу вручную задать тему monaco.editor.defineTheme
и предоставить правила для своих пользовательских токенов rules: [{token:'my.tokentype', foreground:...}]
, и в результате я получаю подсветку синтаксиса так , как хочу, и правила работают как для токенов, определенных Монархом, так и для семантических токенов.
Теперь я хочу сделать то же самое для VSCode. Грамматика TextMate и языковой сервер предоставляют типы токенов textmate и типы семантических токенов соответственно, и теперь я хочу предоставить (доступные) стили по умолчанию для типов моих токенов в своем расширении, но я ни за что на свете не могу понять, как заставить VSCode выделять документ на моем языке на основе типов моих токенов. Используя инспектор маркеров и областей, я вижу, что маркерам в моем документе присвоена правильная «область текстового соответствия» или «тип семантического маркера».
Теперь, как мое расширение может стилизовать эти токены? Я нашел точку colors
вклада, но это может обеспечить только цвета (не дополнительный стиль, например italic
, и т. Д.), И я понятия не имею, как назначить эти цвета моим типам токенов…
единственный способ , которым я заставил VSCode выделить что-либо, — это использовать точку semanticTokenTypes
вклада и объявить значение по умолчанию superType
, но, конечно, в этом случае он будет использовать подсветку, связанную с этим супертипом, а не что-либо, предоставленное моим расширением…
Комментарии:
1. цвет маркера определяется в файле темы
2. Я знаю, но темы нет. Я хочу указать значение по умолчанию, которое используется вместо темы, поддерживающей мои пользовательские типы токенов (чего ни один из них не сделает), или заставить пользователей использовать новую пользовательскую тему.
3. это вынудит ваших пользователей использовать определенную тему, в противном случае цвета по умолчанию сделают код нечитаемым для некоторых тем. Вы можете указать все цвета для областей текстового соответствия в настройках переопределения темы
4. …а? Я не хочу заставлять пользователя использовать пользовательскую тему. Именно поэтому я хочу предоставить значения по умолчанию , которые могут быть либо реализованы в теме, либо переопределены непосредственно пользователями.
5. имея значения по умолчанию, нет смысла вводить определение языка, просто создайте области textmate и надейтесь, что дизайнеры тем подберут новые имена, как некоторые для C и Python