Project

General

Profile

Maintenance du formatage lors de la sérialisation

De quoi s'agit-il ?

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.

Où est-ce implanté ?

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.

Détail des différentes instructions.

L'instruction standard pour ajouter un saut de ligne, une indentation, etc est de la forme suivante :
c . setAdd() . before(token) / after(token)
  • c est la configuration du formatage, l'entrée de la fonction à modifier
  • 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).
  • before() ou after() sont les méthodes précisant où l'ajout s'effectuera.
  • Token est l'objet grammatical autour duquel va s'effectuer l'ajout.
Voici un exemple d'instruction pour mieux comprendre ce que nous venons d'expliquer :
c.setSpace("\n").before(f.getLocalsAccess().getLocalsAssignment_1_1());
Cette action ajoute une espace devant le premier objet de la première parenthèse de la règle "Locals".
Les noms des fonctions pour se référer à des objets particuliers est facilement trouvable via eclipse mais en voici une description :
  • chaque nombre correspond au numéro du token dans la règle
  • les underscores correspondent aux différents niveaux de parenthèsage de la règle

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.