【问题标题】:Xtext autcompletion with qualified names customisation带有限定名称自定义的 Xtext 自动补全
【发布时间】:2014-10-15 20:28:04
【问题描述】:

在来自 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”时,它会消失。

【问题讨论】:

    标签: java eclipse autocomplete xtext


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我使用了你的第二个建议,它奏效了。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,但这不是我想要的。很抱歉没有很好地描述问题。我更新了一个更好的描述
    • 只有在您的语言中使用不区分大小写的关键字时才需要该选项
    猜你喜欢
    • 2017-05-09
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多