我正在构建一个 Xtext DSL,我想在某些特定位置嵌入 Xbase 表达式,以使用 Xbase 解释器解释我的部分模型,但我无法在生成的编辑器中完成方法。
我重用了此处提供的示例:https ://www.eclipse.org/Xtext/documentation/201_sevenlang_introduction.html ,并设法将 Xbase 集成为我的语法的一部分。关键字完成建议工作正常(即do
,,for
... while
),但我找不到完成 Java/Xbase 方法(例如newArrayList
,或myArray.add(X)
)的方法。
下面的评论澄清:如果我var x = newArrayList
在编辑器中编写该方法不是斜体样式,但我也没有任何错误。
这是我正在使用的语法的示例版本:
grammar org.xtext.example.common2.Common2 with org.eclipse.xtext.xbase.Xbase
generate common2 "http://www.xtext.org/example/common2/Common2"
import "http://www.eclipse.org/xtext/xbase/Xbase"
Test returns Test:
{Test}
'test'
expressions+=Script
;
Script returns XBlockExpression:
{Script}
'{'
(expressions+=XExpressionOrVarDeclaration ';'?)*
'}'
;
我发现如果我将语法更改为以下语法,我可以按预期完成:
grammar org.xtext.example.common2.Common2 with org.eclipse.xtext.xbase.Xbase
generate common2 "http://www.xtext.org/example/common2/Common2"
import "http://www.eclipse.org/xtext/xbase/Xbase"
Test returns XBlockExpression:
{Test}
'test'
expressions+=Script
;
Script returns XBlockExpression:
{Script}
'{'
(expressions+=XExpressionOrVarDeclaration ';'?)*
'}'
;
我的猜测是所有的树都必须由 XExpression 的实例组成才能完成,但我不明白为什么?对我来说Test
不应该是XBlockExpression
(在我的实际用例Test
中有额外的属性/引用)的子类,但它应该包含一个XBlockExpression
.
有没有办法做到这一点?任何帮助/资源都将不胜感激
注意
我已经检查了这个 SO 问题How to embed XBase expressions in an Xtext DSL,我已经xbase.lib
在我的构建路径中。