具有限定名称自定义的Xtext自动完成

时间:2014-10-14 10:45:04

标签: java eclipse autocomplete xtext

在xtext documentation的Domainmodel示例中,您可以使用限定名称引用实体。例如,你可以写:

entity Post extends Org.eclipse.example.MyClass{ 
}

现在你也可以使用ctr +空格并获得辅助:所以上面的例子将是

entity Post extends //use content assist here
{ 
}

你会得到一个包含Org.eclipse.example.MyClass和Org.eclipse.example.YourClass (通知大写)的列表。假设两者都有定义。

当开始输入类名时,内容辅助就会消失。为了使其正常工作,您必须键入孔限定名称。现在这是因为我用大写字母开始我的包的名称在java中不是这样的情况,但在这个DSL中,情况不应该是这样的。

所以知道我怎么能自定义这个行为,所以内容辅助也适用于以大写字母开头的包?

更新:当以大写字母开头时,问题如下,自动完成将需要获取孔限定名称。因此,在您键入“O”的示例中,您将获得“Org.eclipse.example.MyClass,Org.eclipse.example.YourClass”,但是当您键入“M”时它会消失。当你将它改为小写(org.eclipse.example.MyClass)时,当你输入M时你得到'MyClass',当输入'o'时它会消失。

2 个答案:

答案 0 :(得分:1)

您看到提案提供程序中的优化会产生负面影响。大写名称应该是简单名称的一部分(遵循Java命名约定)。调整内容辅助前缀匹配器是调整场景的正确方法。为此,您必须绑定org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher的自定义impl或稍微不灵活但更容易实现:org.eclipse.xtext.ui.editor.contentassist.FQNPrefixMatcher.DefaultLastSegmentFinder

答案 1 :(得分:0)

您应该查看有关case insensitive languages的这篇文章。 如果您需要不区分大小写的内容,则只需在mwe2工作流中修改内容辅助:

fragment = org.eclipse.xtext.generator.parser.antlr.ex.ca.ContentAssistParserGeneratorFragment {
    options={
        ignoreCase = true
    }
}