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 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 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 (I < 5 )
{
printf (i<5 !\n) ;
if (i < 3)
{
printf (i<3 !\n) ;
if (i < 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)
{
}
}
}
}
}
|
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 :
//+------------------------------------------------------------------+
|