Как грамматики и темы TextMate работают с VSCode? - PullRequest
1 голос
/ 22 мая 2019

VSCode построен поверх MonacoEditor, который не поддерживает грамматики и темы TextMate.Но как-то VSCode сделал это возможным.Мне любопытно, как VSCode может это сделать.

Я спрашиваю, потому что я делаю редактор кода (на основе Монако) с грамматикой TextMate и поддержкой тем.Но я не могу понять, как мне этого добиться.

Хотя существуют пакеты, такие как monaco-textmate, чтобы заставить грамматики TextMate работать с Монако, подсветка синтаксиса все еще не работает должным образом .

1 Ответ

0 голосов
/ 22 мая 2019

грамматики TextMate зависят от конкретной реализации / библиотеки регулярных выражений под названием Oniguruma , которая реализована в C. Однако Монако предназначено для работы в браузере, и доступный там механизм регулярных выражений JavaScript не совместим с Oniguruma , Все это подробно объясняется в «Почему редактор не поддерживает грамматики TextMate?» в разделе FAQ Монако . В нем также упоминается возможность, возможно, в конечном итоге скомпилировать Oniguruma в WebAssembly , чтобы обойти это.

Сам VSCode использует vscode-textmate для своей обработки TMLanguage, которая имеет библиотеку Oniguruma как native зависимость. VSCode может иметь собственные зависимости, потому что он не работает в среде браузера.

Согласно readme монако-текстового партнера, он в значительной степени основан на vscode-textmate:

99% кода в этом хранилище извлекается прямо из vscode-textmate

И он использует подход WASM, упомянутый ранее:

monaco-textmate опирается на пакет onigasm для обеспечения oniguruma regex engine в браузерах. сам onigasm опирается на WebAssembly.

Что касается того, почему подсветка синтаксиса не всегда работает должным образом с monaco-textmate ... Я понятия не имею, я ожидаю, что это просто ошибка в реализации. Возможно, дождитесь ответа от сопровождающего, проблема, с которой вы столкнулись, довольно новая.

По крайней мере, концептуально не должно быть причины, по которой он не мог бы добиться того же выделения подсветки синтаксиса, что и VSCode, поскольку он использует тот же тип регулярного выражения.

...