如何自定义Xtext创建的自动完成?

时间:2014-08-04 16:52:08

标签: eclipse autocomplete xtext content-assist

简介:我在Xtext中编写了一个简单的语法,它与自动完成功能不同。它并不像它根本不工作,但它不像我想要的那样工作,所以我开始寻找自定义自动完成的可能性。我发现有很多可能性,但我找不到任何具体的解释 这就是我在这里所要求的。我希望你能帮助我。

我的语法:

grammar sqf.Sqf with org.eclipse.xtext.common.Terminals

generate sqf "http://www.Sqf.sqf" 

Model:
    elements += Element*
;

    Element:
        Declaration ";" | Command ";"
    ;

        Declaration:
            Variable | Array
        ;


            Variable:
                name=ID "=" content=VARCONTENT (("+"|"-"|"*"|"/") content2+=VARCONTENT)*
            ;


            Array:
                name=ID "=" contet=ArrayLiteral | name=ID "=" "+" content2+=[Array]
            ;

                ArrayLiteral:
                    "[" (content += ArrayContent)* "]" (("+"|"-")content1+=Extension)*
                ;

                    ArrayContent:
                        content01=Acontent ("," content02+=Acontent)*
                    ;

                        Acontent:
                            STRING | INT | Variable | ref=[Declaration] | ArrayLiteral
                        ;

                    Extension:
                        STRING | INT | ref=[Declaration]
                    ;




    Command:
        Interaction
    ;

        Interaction:
            hint
        ;

            hint:
                Normal | Format | Special
            ;

                Normal:
                    name=HintTypes content=STRING
                ;

                Format:
                    name=HintTypes "format" "[" content=STRING "," variable=[Declaration] "]"
                ;

                    HintTypes:
                        "hint" | "hintC" | "hintCadet" | "hintSilent"
                    ;

                Special:
                    hintCArray
                ;

                    hintCArray:
                        title=STRING "hintC" (content1=ArrayLiteral | content=STRING)
                    ;

    VARCONTENT:
    STRING | INT | ref=[Declaration] | "true" | "false" | "nil"
;

我的问题:问题在于,当我'在eclipse编辑器中点击ctrl + space(加载我的插件)我只得到提议" title" -STRING (来自hintCArray规则)和 name-ID (来自声明规则) 我所期待的是它还为我提供了在我的提示命令之间进行选择的可能性。在开始输入命令( hin )之后我也尝试按ctrl + space,结果自动选择放了一个" ="它旁边是变量或数组声明。

我发现我必须在 .ui proposalProvider.java -Files(我认为它是AbstractProposalProvider) > -section。
我现在遇到的问题是,我不知道自己要在那里写什么。

在这个AbstractProposalProvider.java中有这样的东西:
 public void completeModel_Elements(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); }

Greetings Raven

1 个答案:

答案 0 :(得分:1)

你的语法有几个问题,但只关注你的实际问题:

DataTypeRule中的内容永远不会显示在开箱即用的提案中。 (HintTypes) 为了在没有编码的情况下实现它,您可以将可能的类型定义为关键字,如下所示:

正常:     name =(" hint" |" hintC" |" hintCadet" |" hintSilent")content = STRING;

格式:     name =("提示" |" hintC" |" hintCadet" |" hintSilent")"格式" " [" content = STRING","变量= [声明]"]&#34 ;;

干杯, 霍尔格