Project

General

Profile

Maintenance formatage » History » Version 6

« Previous - Version 6/8 (diff) - Next » - Current version
Mathieu MONTIN, 03/13/2013 02:17 PM


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 is the formatting config, input of the function to modify
  • setAdd()) is NOT an acceptable method, it's just our generic name for any existing function that will add something (for instance a tabulation)
  • before() or after() is self-explaining and are the real methods.
  • Token is the grammatical token where we want to make our change.

Here is an example to understand better what we just explained :
c.setSpace("\n").before(f.getLocalsAccess().getLocalsAssignment_1_1());
This action put a carriage return before the first token after the first parenthesis of the grammatical token "Locals".
The names might me pretty hard to find, but eclipse find it for us.

When the grammar is modified, you may have to modify the call to those functions, since the position of the different token may change. This is one of the changes that has to be made in order to maintain the grammar and the formating.