2016-06-08 2 views
0

Я пытаюсь сделать контентную помощь в своем приложении RCP. Для этого я использую Xtend и AbstractJavaBasedContentProposalProvider. Итак, я создал свой AbstratMyDSLProposalProvider, и теперь я пишу класс MyDSLProposalProvider. Ниже файл Xtend и экстракт моей грамматики:Xtend Syntax Content Assist

// 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

Нравится? : переопределения недействительная (модель EObject, RuleCall ruleCall, ContentAssistContext контекст, ICompletionProposalAcceptor акцептор) complete_CONST { \t \t acceptor.accept (createCompletionProposal ("Const", контекст)) \t \t super.complete_CONST (модель, ruleCall, контекст, акцептор) } – alexmouth

+0

Да, что выглядит нормально –

+0

Хорошо, но это не всегда работает ... может быть, это грамматика? В моем случае 'Const' используется только в разделе 'параметров': 'Param: ПОСТ имя = имя, совпадающее значение = Expr NEWLINE +,' – alexmouth

Смежные вопросы