2017-04-18 5 views
0

Pour que les langues xtext deviennent sensibles au retrait, des jetons synthétiques sont utilisés as described here. Mais, dans les emplacements indentés, l'assistant de contenu ne propose rien à moins que la première lettre ne soit saisie.Xtext: aide au contenu pour les langues compatibles avec les indentations

Par exemple, considérons la grammaire suivante:

Model: 
 
\t lines += Line+; 
 
\t 
 
Line: 
 
    \t 'model' name=ID 
 
    \t BEGIN 
 
    \t \t type=(Type1 | Type2 | Type3) 
 
    \t END 
 
; 
 

 
Type1: 
 
'type1:' attr=ID; 
 

 
Type2: 
 
'type2:' attr=ID; 
 

 
Type3: 
 
'type3:' attr=ID; 
 

 
// The following synthetic tokens are used for the indentation-aware blocks 
 
terminal BEGIN: 'synthetic:BEGIN'; // increase indentation 
 
terminal END: 'synthetic:END';  // decrease indentation

Maintenant, après avoir tapé modèle et une nouvelle ligne et un onglet, l'assistant de contenu ne demande rien. Mais, si je tape t et que je demande l'assistance de contenu, je reçois type1, type2 et type3.

Pourquoi l'aide au contenu ne fonctionne-t-elle que lors d'une saisie partielle?

Répondre

0

Votre règle de grammaire indique que les informations de type sont obligatoires entre BEGIN et END dans la règle Line. Je suppose que l'analyseur montre un comportement étrange de récupération d'erreur si vous omettez le type là. Cela vous aidera probablement si vous marquez le type comme facultatif.

+0

Dans ce cas, j'essaie d'implémenter un langage sensible à l'espace blanc. Je souhaite utiliser l'aide au contenu pour demander les différents types possibles à cet endroit. En ce moment, en appuyant sur ctrl + espace après avoir tapé 'model', une nouvelle ligne et un nouvel onglet ne renvoient rien. Mais, si je tape la lettre 't' après cela, l'analyseur reconnaît que les types et m'indique avec 'type1, type2 et type3'. Comment modifier le comportement des jetons synthétiques? –

+0

Le marquer comme optionnel n'a pas aidé –