2016-06-08 1 views
0

J'essaie de créer une assistance de contenu dans mon application RCP. Pour cela, j'utilise Xtend et AbstractJavaBasedContentProposalProvider. Donc, j'ai fait mon AbstratMyDSLProposalProvider et maintenant j'écris la classe MyDSLProposalProvider. Ci-dessous, le fichier Xtend et un extrait de ma grammaire:Xtend Syntaxe Content Assist

// fichier 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); 
} 

// grammaire fichier

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 : '£££'; 

Mais le contenu ne fonctionne pas aider. Est-ce le bon moyen de faire un contenu aider dans Xtext?

Merci

+0

Quelle est votre intention de cette personnalisation –

+0

Ps vous ne créez pas de terminaux pour les mots-clés habituellement. Juste en ligne –

Répondre

0

Vous devez remplacer la méthode complète spécifique pour votre règle de terminal complete_CONST - pas mot-clé complet. Si vous allez à l'endroit où vous écrivez la nouvelle méthode vous obtenez des propositions pour la méthode que vous pouvez remplacer

+0

Comme ça? : override vide complete_CONST (modèle EObject, RuleCall ruleCall, ContentAssistContext contexte, l'accepteur ICompletionProposalAcceptor) { \t \t acceptor.accept (createCompletionProposal ("const", contexte)) \t \t super.complete_CONST (modèle, ruleCall, le contexte accepteur } – alexmouth

+0

Oui ça a l'air ok –

+0

D'accord mais ça ne marche pas toujours ... c'est peut-être la grammaire? Dans mon cas, le 'const' est utilisé dans la section «paramètres: ' Param: Nom CONST = NOM valeur égale = Expr NEWLINE +; ' – alexmouth