Aide MetaEditor

Styler

Cette fonction permet de mettre en forme le code source selon les standards recommandés. Ceci permet d'améliorer la lisibilité du code source et de le faire ressembler à du code professionnel. Un code correctement mis en forme est beaucoup plus facile à analyser par la suite par son auteur et par les autres utilisateurs. Pour démarrer le styler, exécutez la commande "Styler Styler" du menu "Outils" ou utiliser le raccourci clavier "Ctrl+,".

Les changements apportés à la mise en forme du code source par le styler peuvent être annulés en utilisant la commande "Annuler Annuler" du menu "Edition" ou de la barre d'outils "Standard" ; vous pouvez également utiliser le raccourci clavier "Ctrl+Z".

Descriptions Générales

Les types d'actions sur le code source suivants sont implémentés dans le style pour une mise en forme correcte :

  • Remplacement des lignes spécifiées par d'autres lignes spécifiées ;
  • Alignement des opérateurs avec le langage ;
  • Insertion de commentaires dans l'en-tête de fichier ;
  • Insertion de commentaires avant les fonctions, structures, classes et de leurs méthodes ;
  • Insertion de commentaires à la fin du fichier.

Le styler effectue les corrections suivantes basées sur les types d'actions mentionnées ci-dessus :

Espaces et Lignes Vides

La suppression des espaces non nécessaires permet de rendre le code source plus compact et d'améliorer sa perception. Le styler remplace également chaque tabulation avec trois espaces afin d'éviter la distorsion de la mise en forme du code source lorsque celui-ci est ouvert dans un logiciel tiers.

Le Styler Supprime les Espaces :

  • A la fin des lignes ;
  • Avant le ";" (point-virgule) ;
  • Entre "if" et "(", "while" et "(", "for" et "(", "switch" et "(", "return" et "(".
  • Après ";" dans "for()" ;
  • Après "!" ;
  • Près de "(" et ")" ;
  • Près de "<" et ">" ;
  • Près de "|" et "^" ;
  • Près de "+", "-", "/" et "%" ;
  • Près de "[" et "]" ;
  • Près de "==" et "==" ;
  • Près de "!=" et "!=" ;
  • Près de "<=" et ">=" ;
  • Près de "+=" et "+=" ;
  • Près de "-=" et "-=" ;
  • Près de "*=" et "*=" ;
  • Près de "/=" et "/=" ;
  • Près de "<<" et ">>" ;
  • Un espace uniquement à droite et à gauche de "," et de "=".

Le Styler Place :

  • Un espace à droite et à gauche de "||" et de "&&" (le résultat est " || " et " && ").

Autres Substitutions :

  • Dans les expressions telles que "int* a" les symboles "*" et "&" se rapportent à la variable mais pas au type, l'expression est alors remplacée par "int *a" ;
  • Les lignes vides doubles sont remplacées par une seule ligne vide.

Avant la mise en forme

Après la mise en forme

void myFunction() 
  {
   if   (I  <  10)
  {
   printf (“Hello\n”) ;
   if (< 5 )
     {
             printf (“i<5 !\n”) ;
             if (< 3)
               {
                printf (“i<3 !\n”) ;
                if (< 2)
                  {
                  }
               }
            }
  }
     }

void myFunction()
  {
   if(I<10)
     {
      printf(“Hello\n”);
      if(I<5)
        {
         printf(“i<5 !\n”);
         if(i<3)
           {
            printf(“i<3 !\n”);
            if(i<2)
              {
              }
           }
        }
     }
  }

La taille de la tabulation est toujours égale à trois espaces, indépendamment des paramètres de MetaEditor.

Exceptions de Substitution de la Mise en Forme avec un Aperçu de l'Alignement des Interlignes

Les règles de substitution effectuées par le styler ne sont pas appliqués dans certains cas. Il est implémenté de telle façon que l'alignement du code effectué par l'auteur avec les lignes adjacentes est conservé. Le styler reconnaît l'alignement des interlignes avec les lignes adjacentes pour les mots-clés et les symboles suivants :

  • "//" – symboles de commentaires "C" ;
  • "{" – accolade ouvrante ;
  • "}" – accolade fermante ;
  • "return" – opérateur "return" ;
  • "delete" – opérateur "delete" ;
  • "=" – symbole d'égalité ;
  • ":" – symbole 'deux points' ;
  • "." – symbole 'point'.

Si le styler trouve un des mots ou symboles mentionnés ci-dessus pendant son analyse aux mêmes positions que celles de la ligne précédente, les substitutions ne sont alors pas effectuées.

Mise en Forme des Fonctions et des Opérateurs

  • Deux espaces sont insérés entre la déclaration du type de la fonction / du bloc avant les caractères "{" et "}", ouvrant et fermant la fonction/le bloc.
  • Trois espaces sont insérés depuis le début du bloc et devant chaque ligne située entre les caractères "{" et "}" de la fonction/du bloc.
  • Dans le cas de caractères "{" ou "}" non fermés dans un bloc contenant du texte, ces caractères sont insérés sur des lignes séparées.
  • L'alignement est également effectué en tenant compte des lignes précédentes. Si la ligne précédente contient une parenthèse non fermée ou une expression arithmétique non terminée, la ligne actuelle commencera alors à la première position après les caractères "(" ou "=" de la ligne précédente.
  • La condition "else" est toujours placée à la même position que la condition "if" ;

Avant la mise en forme

Après la mise en forme

void myFunction()  {
int k[10],t=0;
for(int i=0;i<10;i++){
   k[i]=i;
   t+=i;}   
if  (button==name) {
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
else {
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
}

void myFunction() 
  {
   int k[10],t=0;
   for(int i=0;i<10;i++)
     {
      k[i]=i;
      t+=i;
     }
   if(button==name) 
     {
      bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
      if(!state)
         ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
   else 
     {
      ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
  }

Alignement des Déclarations des Structures, des Classes et des Énumérations

Dans le cas des expressions ci-dessous, la tabulation à double niveau est utilisée :

  • Trois espaces sont placés avant l'indication du type du membre ou de la méthode décrite ;
  • Les noms des membres ou des méthodes de la classe ou de la structure sont décalés jusqu'à la colonne 22 sur la ligne ;
  • Les mot clés de visibilité des membres et des méthodes ("private", "protected", et "virtual") sont alignés avec le mot clé "class".

Avant la mise en forme

Après la mise en forme

class CTradePad  {
 private:
 int m_rows;
 int m_columns;
 int m_button_width;
 int m_button_height;
 int m_top;
 int m_left;
 int m_left_previous_header;
  };

class CTradePad  
  {
private:
   int               m_rows;
   int               m_columns;
   int               m_button_width;
   int               m_button_height;
   int               m_top;
   int               m_left;
   int               m_left_previous_header;
  };

Alignement des Commentaires

Il existe une différence entre l'alignement des commentaires dans les déclarations et dans les définitions :

  • Les commentaires du premier niveau sont alignés à gauche (sans indentation) dans les définitions des fonctions et des méthodes ;
  • Les commentaires du premier niveau dans les déclarations sont alignés au niveau de la troisième colonne de la ligne ;
  • Les commentaires des niveaux suivants sont alignés sur le niveau correspondant des blocs dans lesquels ils sont spécifiés.

Avant la mise en forme

Après la mise en forme

void myFunction()  {
//--- Commentaire de 1er niveau
int k[10],t=0;
for(int i=0;i<10;i++){
   k[i]=i;
   t+=i;}   
if  (button==name) {
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
//--- Commentaire de 2eme niveau
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
else {
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
}

void myFunction() 
  {
//--- Commentaire de 1er niveau
   int k[10],t=0;
   for(int i=0;i<10;i++)
     {
      k[i]=i;
      t+=i;
     }
   if(button==name) 
     {
      bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
      //--- Commentaire de 2eme niveau
      if(!state)
         ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
   else 
     {
      ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
  }

class CTradePad
  {
private:
   int m_rows;
 //--- nombre de lignes
   int m_columns;   
              //--- nombre de colonnes
   int m_button_width; 
//--- largeur de la cellule
 
  };

class CTradePad
  {
private:
   int               m_rows;
   //--- nombre de lignes
   int               m_columns;
   //--- nombre de colonnes
   int               m_button_width;
   //--- largeur de la cellule
 
  };

Insertion de Commentaires

Les commentaires du type suivant sont insérés dans l'en-tête du fichier s'il n'existe pas :

//+------------------------------------------------------------------+
//|                                                      NomDuProjet |
//|                                Copyright © 2009, NomDeLaSociete.|
//|                                   http://www.nomdelasociete.net |
//+------------------------------------------------------------------+

Les commentaires du type suivant sont insérés avant les fonctions, classes, structures, etc. s'il n'y en a pas :

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

Le commentaire de fin suivant est inséré à la fin du fichier :

//+------------------------------------------------------------------+