Project

General

Profile

Maintenance formatage » History » Version 8

Mathieu MONTIN, 03/13/2013 02:25 PM

1 1 Mathieu MONTIN
h1. Maintenance du formatage lors de la sérialisation
2 2 Mathieu MONTIN
3 2 Mathieu MONTIN
h2. De quoi s'agit-il ?
4 2 Mathieu MONTIN
5 2 Mathieu MONTIN
Xtext est capable de générer du code. C'est ce qui est utilisé pour rafraîchir les fichiers lustre lorsque l'éditeur graphique y apporte des modifications. Par défaut, xtext génère tous les tokens grammaticaux à la suite et coupe à 80 caractères, ce qui donne un code totalement incompréhensible. Pour cette raison, il est possible de définir un formateur qui va venir ajouter par exemple des sauts de ligne ou des tabulations dans le code. 
6 2 Mathieu MONTIN
7 2 Mathieu MONTIN
h2. Où est-ce implanté ?
8 3 Mathieu MONTIN
9 4 Mathieu MONTIN
La fonction de formatage est la fonction *configureFormatting* du fichier _*LustreFormatter.java*_ du package *org.obeonetwork.dsl.lustre.formatting*. Dans cette fonction sont regroupées les instructions qui vont permettre de mettre en forme le code générer. 
10 5 Mathieu MONTIN
11 5 Mathieu MONTIN
h2. Détail des différentes instructions.
12 5 Mathieu MONTIN
13 6 Mathieu MONTIN
L'instruction standard pour ajouter un saut de ligne, une indentation, etc est de la forme suivante :
14 6 Mathieu MONTIN
c . setAdd() . before(token) / after(token) 
15 8 Mathieu MONTIN
* c est la configuration du formatage, l'entrée de la fonction à modifier
16 8 Mathieu MONTIN
* setAdd n'est pas la fonction à appeler réellement, c'est juste notre nom générer pour référer n'importe quelle fonction existante ajoutant quelque chose lors de la sérialisation (par exemple une tabulation).
17 8 Mathieu MONTIN
* before() ou after() sont les méthodes précisant où l'ajout s'effectuera.
18 8 Mathieu MONTIN
* Token est l'objet grammatical autour duquel va s'effectuer l'ajout.
19 1 Mathieu MONTIN
20 8 Mathieu MONTIN
Voici un exemple d'instruction pour mieux comprendre ce que nous venons d'expliquer :
21 6 Mathieu MONTIN
*c.setSpace("\n").before(f.getLocalsAccess().getLocalsAssignment_1_1());*
22 8 Mathieu MONTIN
Cette action ajoute une espace devant le premier objet de la première parenthèse de la règle "Locals".
23 8 Mathieu MONTIN
Les noms des fonctions pour se référer à des objets particuliers est facilement trouvable via eclipse mais en voici une description : 
24 8 Mathieu MONTIN
* chaque nombre correspond au numéro du token dans la règle
25 8 Mathieu MONTIN
* les underscores correspondent aux différents niveaux de parenthèsage de la règle
26 6 Mathieu MONTIN
27 8 Mathieu MONTIN
28 8 Mathieu MONTIN
Quand la grammaire est modifiée, il faudra donc peut être modifier aussi le formatter en changeant ces appels de fonctions pour qu'ils correspondent à la nouvelle position des tokens dans les règles. C'est une partie très importante de la maintenance.