2016-06-08 80 views
0

我试图在我的RCP应用程序中提供内容帮助。为此,我使用Xtend和AbstractJavaBasedContentProposalProvider。所以,我制作了我的AbstratMyDSLProposalProvider,现在我正在写MyDSLProposalProvider类。下面,XTEND文件和我的语法的摘录:Xtend语法内容协助

//的Xtend文件

override void completeKeyword(Keyword keyword,ContentAssistContextcontentAssistContext, ICompletionProposalAcceptor acceptor) { 
    //acceptor.accept(createCompletionProposal(keyword, context)) 
    if(keyword.getValue().equals("const")){ 
     return; 
    } 
    super.completeKeyword(keyword, contentAssistContext, acceptor); 
} 

//语法文件

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals 

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl" 

Model: 
    NEWLINE* 
    (sections+=Options_sect?)? 
    (sections+=Parameters_sect)? 
; 

Options_sect 
: name=SEC_OPTIONS QUOTE_COMMENT? NEWLINE+ suiteOpt=Suite_options? 
; 

Suite_options 
: {Suite_options} INDENT (options+=Opt)* DEDENT NEWLINE? 
; 

Opt 
: name=OPTION_NAME EQUAL (value=DECIMALINTEGER) NEWLINE+ 
; 

Parameters_sect 
: name=SEC_PARAMETERS QUOTE_COMMENT? NEWLINE+ suiteParam=Suite_parameters? 
; 

Suite_parameters 
: {Suite_parameters} INDENT (params+=Param)* DEDENT NEWLINE? 
; 

Param 
: CONST name=NAME EQUAL value=DECIMALINTEGER NEWLINE+ 
; 

terminal SEC_OPTIONS : 'options'SPACES*':'; 
terminal SEC_PARAMETERS : 'parameters'SPACES*':'; 
terminal EQUAL : '='; 
terminal DECIMALINTEGER : '0'|('1'..'9'(('_'|'0'..'9')*'0'..'9')?); 
terminal NAME 
: ((PP_LABEL* ID_START ID_CONTINUE* PP_LABEL*) | PP_LABEL)('.' (PP_LABEL|ID_CONTINUE)*)* 
; 
terminal PP_LABEL 
: '%'ID_START ID_CONTINUE*'%' 
; 
terminal fragment ID_START 
: '_' 
| 'A'..'Z' 
| 'a'..'z' 
; 
terminal fragment ID_CONTINUE 
: ID_START 
| '0'..'9' 
; 
terminal OPTION_NAME : '$'NAME; 
terminal CONST : 'const'; 
terminal NEWLINE : ((NLINE SPACES?)+); 
terminal fragment NLINE:('\r'? '\n' | '\r'); 
terminal SPACES: (' '|'\t')+; 

terminal QUOTE_COMMENT : INVERTED_COMMA -> INVERTED_COMMA; 
terminal INVERTED_COMMA : '\"'; 

// Indentation 
terminal INDENT :'µµµ'; 
terminal DEDENT : '£££'; 

但内容辅助不起作用。这是在Xtext中制作内容协助的好方法吗?

谢谢

+0

你对这个定制的意图是什么 –

+0

你不需要为关键字创建终端。只是内联他们 –

回答

0

你必须覆盖特定的终端规则complete_CONST完整的方法 - 不完整的关键字。如果你去你要写新方法的地方,你会得到你可以覆盖的方法的建议

+0

喜欢这个? : 覆盖无效complete_CONST(EObject模型,RuleCall ruleCall,ContentAssistContext上下文,ICompletionProposalAcceptor受体){ \t \t acceptor.accept(createCompletionProposal( “常量”,上下文)) \t \t super.complete_CONST(模型,ruleCall,语境,受体) } – alexmouth

+0

是的,看起来不错 –

+0

好吧,但它总是不工作...也许这是语法?在我的情况下, '常量' 在 '参数' 部分仅用于: '帕拉姆:CONST名称= NAME同等价值= Expr的NEWLINE +;' – alexmouth