2016-06-08 93 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