Я создал пользовательский DSL с использованием Xtext, а также внедрил его в Eclipse Che в качестве дополнительной платформы для языкового сервера. Все работает как положено, кроме синтаксической раскраски. Из того, что я узнал при поиске по этой теме, причина этого заключается в протоколе Language Server, который не поддерживает подсветку синтаксиса.
Обычно в Eclipse Che поддержка подсветки синтаксиса для разных языков предоставляется через редактор Orion. Однако, поскольку созданный мной DSL является совершенно новым типом файлов (который редактор Orion не распознает), я хочу реализовать файл грамматики или аналогичный подход, чтобы редактор Orion распознавал мой DSL и предоставлял для него синтаксическую раскраску. в Eclipse Che.
Я нашел эту проблему в github весьма полезной. Ниже приведен фрагмент кода, который необходимо реализовать для включения этой функции: -
@Inject
protected void configureContentType(final OrionContentTypeRegistrant contentTypeRegistrant) {
// register content type and configure orion
final String contentTypeId = "text/x-testlang";
OrionContentTypeOverlay contentType = OrionContentTypeOverlay.create();
contentType.setId(contentTypeId);
contentType.setName("Test Language");
contentType.setExtension("testlang");
contentType.setExtends("text/plain");
// highlighting
OrionHighlightingConfigurationOverlay config = OrionHighlightingConfigurationOverlay.create();
config.setId("testlang.highlighting");
config.setContentTypes(contentTypeId);
config.setPatterns(
"[\n" +
" {include: \"orion.lib#string_doubleQuote\"},\n" +
" {include: \"orion.lib#string_singleQuote\"},\n" +
" {include: \"orion.lib#brace_open\"},\n" +
" {include: \"orion.lib#brace_close\"},\n" +
" {include: \"orion.lib#bracket_open\"},\n" +
" {include: \"orion.lib#bracket_close\"},\n" +
" {include: \"orion.lib#parenthesis_open\"},\n" +
" {include: \"orion.lib#parenthesis_close\"},\n" +
" {include: \"orion.lib#number_decimal\"},\n" +
" {include: \"orion.lib#number_hex\"},\n" +
" {\n" +
" match: \"\\\\b(?:false|true)\\\\b\",\n" +
" name: \"keyword.json\"\n" +
" }\n" +
"]");
contentTypeRegistrant.registerFileType(contentType, config);
}
Тем не менее, он не упоминает, где именно и как я должен реализовать этот код. Поскольку я не знаком с Орионом, я сам не мог этого понять, даже если бы попытался. Я считаю, что мне следует реализовать файл .json с ключевыми словами, что мне тоже не очень понятно (относительно того, как я должен написать такой файл).
Если кто-нибудь может поддержать меня, сообщив мне, как и где мне следует реализовать этот фрагмент кода в моем проекте Xtext с соответствующим файлом .json, я был бы очень признателен.
Заранее спасибо!