我已经使用Xtext创建了一个Custom DSL,并且我还在Eclipse Che中将其实现为语言服务器的辅助工具。一切正常,语法着色除外。从我在该主题上进行搜索所学到的知识,其背后的原因是语言服务器协议不支持语法突出显示。
通常,在Eclipse Che中,通过Orion Editor提供了对不同语言的语法突出显示支持。但是,由于我创建的DSL是一种全新的文件类型(Orion编辑器无法识别),因此我想实现一个语法文件或类似的方法,以便Orion Editor能够识别我的DSL并为其提供语法颜色在Eclipse Che中。
我发现github中的this issue很有帮助。它提供了以下代码片段以实现启用此功能:-
@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);
}
但是,它没有确切说明我应该在哪里以及如何实现此代码。因为我不熟悉Orion,所以即使我尝试了,也无法自己理解。我相信我应该用关键字实现一个.json文件,这对我来说也不是很清楚(关于我应该如何写这样的文件)。
如果有人可以通过在相关的.json文件中在Xtext项目中实现该代码段的方式和位置来支持我,我将不胜感激。
谢谢!