Aide MetaEditorDévelopper des programmesStyler

Styler

Le styler corrige rapidement le code source pour être en ligne avec le standard recommandé. Il rend le code plus professionnel et plus facile à lire. Un code bien conçu est plus facile à analyser dans le futur, à la fois pour son auteur et pour les autres utilisateurs. Pour lancer le Styler, cliquez sur Styler Styler dans le menu Outils ou appuyez sur Ctrl+,.

  • Les changements dans le design du code faits par le Styler peuvent être annulés. Cliquez sur Annuler Annuler dans le menu Edition ou appuyez sur Ctrl+Z.
  • Le styler prend en charge une variété de normes de codage. Le style peut être modifié dans les paramètres de l'éditeur. Les règles de conception du style MetaQuotes recommandé sont décrites en détail ci-dessous.

Général

Les types suivants d'action sont fournis pour formatter proprement le code dans le Styler:

  • Remplacer certaines lignes avec des lignes spécifiées ;
  • Aligner les opérateurs du langage ;
  • Insérer des commentaires dans l'en-tête du fichier ;
  • Insérer des commentaires avant les fonctions, structures, classes et leurs méthodes ;
  • Insérer des commentaires à la fin du fichier.

Le Styler effectue les modifications suivantes (sur la base des types d'actions ci-dessus) :

Espaces et lignes blanches

Supprimer les espaces non nécessaires vous permet d'avoir un code plus compact améliorant ainsi sa perception. Le Styler remplace également chaque tabulation par 3 espaces pour éviter la distortion possible de son formatage lorsque le fichier est ouvert dans des programmes tiers.

Le Styler enlève les espaces :

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

Ensembles du Styler :

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

Autres remplacements :

  • Dans les constructions du type "int* a", les caractères "*" et "&" se réfère à la variable plutôt qu'au type, donc cela peut être remplacé par "int *a" ;
  • Les lignes blanches doubles sont remplacées par une seule.

Avant formatage

Après formatage

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 tabulation du Styler est toujours égale à 3 espaces indépendamment des paramètres de MetaEditor.

Exclusion des remplacements lors du formatage en tenant compte de l'alignement de l'interligne

Les règles de remplacement du Styler spécifiées ci-dessus ne sont pas appliquées dans certains cas. Ceci permet de ne pas violer l'alignement du copyright sur des lignes adjacentes. Le Styler reconnaît l'alignement de l'interligne sur la ligne suivant pour les mots-clés et symboles suivants :

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

Si le Styler trouve l'un des mots ou des symboles ci-dessus à la même position qu'à la ligne précédente ou qu'à la ligne suivante, aucun remplacement n'y est effectué.

Formatage des fonctions et opérateurs

  • Deux espaces sont placés avant les symboles "{" et "}" qui ouvrent et ferment une fonction/un opérateur pour la déclaration du type de la fonction/de l'opérateur.
  • Trois espaces depuis le début de l'opérateur sont placés avant chaque ligne située entre les symboles "{" et "}" de la fonction/de l'opérateur.
  • S'il y a des symboles "{" ou "}" non fermés dans l'opérateur avec un texte, ces symboles et le texte sont placés sur différentes lignes.
  • L'alignement est également effectué en considérant le contenu de la ligne précédente. Si une parenthèse n'est pas fermée ou si une expression arithmétique n'est pas complétée sur la ligne précédente, alors le premier caractère de la ligne courante est placé après le symbole (" ou "=" de la ligne précédente.
  • La condition "else" est toujours définie en lien avec "if".

Avant formatage

Après formatage

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 lors de la déclaration des structures, classes et énumérations

Ces expressions appliquent également la tabulation à 2 niveaux :

  • Trois espaces sont placés avant de spécifier le type d'un membre/d'une méthode décrite;
  • Les noms de la structure décrite, des membres de la classe ou des méthodes sont placés à la 22ème position d'une ligne ;
  • Les spécificateurs d'accès aux membres et méthodes ("private", "protected", "private" et "virtual") sont alignés avec le mot "class".

Avant formatage

Après formatage

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

Les commentaires sont alignés différemment dans les déclarations et dans les définitions :

  • Les commentaires de 1er niveau dans la définition d'une fonction ou d'une méthode sont alignés sur la gauche (sans indentation) ;
  • Les commentaires de 1er niveau dans une déclaration sont alignés à la 3ème position d'une ligne ;
  • Les commentaires des niveaux suivants sont alignés de façon égale au niveau correspondant des opérateurs dans lesquels ils sont indiqués.

Avant formatage

Après formatage

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 2ème 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 2ème 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 cellule
 
  };

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

Insertion de commentaires

Un commentaire de la forme suivante est inséré dans l'en-tête d'un fichier s'il est manquant :

//+------------------------------------------------------------------+
//|                                                      NomDuProjet |
//|                                   Copyright © 2009, NomCompagnie.|
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+

Les commentaires de la forme suivante sont insérés avant les fonctions, classes, structures, etc. lorsqu'ils sont manquants :

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

Un commentaire de séparation du type suivant est inséré à la fin d'un fichier :

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