Ajuda para o MetaEditorDesenvolvimento de programasEstilizador

Estilizador

O estilizador permite que você traga rapidamente o estilo do código fonte ao padrão recomendado. Isso torna o código fácil de ler e faz que pareça profissional. Um código bem apresentado é muito mais fácil de ler e analisar, no futuro, pelo seu autor e outros usuários. Para iniciar o estilizador, clique em "Estilizador Estilizador" no menu "Ferramentas" ou "Ctrl+".

  • Alterações no design do código, feitas pelo estilizador, podem ser revertidas. Clique em "Desfazer Desfazer" no menu "Editar" ou "Ctrl+Z".
  • O estilizador oferece suporte a muitos padrões de codificação. Você pode mudar o estilo nas configurações do editor. As regras de layout para o estilo MetaQuotes recomendado são detalhadas abaixo.

Descrição geral

Para formatar corretamente o código no estilizador, são fornecidos os seguintes tipos de ação com o código:

  • Substituir as linhas especificadas por outras;
  • Alinhar operadores de linguagem;
  • Inserir comentários no cabeçalho do arquivo;
  • Inserir comentários antes de funções, estruturas, classes e seus métodos;
  • Inserir comentários no final do arquivo.

Com base nos tipos de ações mencionados, o estilizador faz o seguinte ajuste:

Espaços e linhas em branco

Remoção de espaço em branco desnecessários permite compactar o código, melhorando assim sua percepção. Além disso, o estilizador substitui cada caractere de tabulação por três espaços para evitar possível distorção de sua formatação quando aberto em programas de terceiros.

O estilizador limpa os espaços em branco:

  • No final das linhas;
  • Antes do caractere ";";
  • Entre "if" e "(", "while" e "(", "for" e "(", "switch" e "(", "return" e "(".
  • Após ";" dentro de "for()";
  • Após "!";
  • Ao lado de "(" e ")";
  • Ao lado de "<" e ">";
  • Ao lado de "|" e "^";
  • Ao lado de "+", "-", "/" e "%";
  • Ao lado de "[" e "]";
  • Ao lado de "==" e "==";
  • Ao lado de "!=" e "!=";
  • Ao lado de "<=" e ">=";
  • Ao lado de "+=" e "+=";
  • Ao lado de "-=" e "-=";
  • Ao lado de "*=" e "*=";
  • Ao lado de "/=" e "/=";
  • Ao lado de "<<" e ">>";
  • Um espaço à direita e à esquerda de "," e "=".

O estilizador define:

  • Um espaço à direita e à esquerda para "||" e "&&" (resultado: " || " e " && ").

Outras substituições:

  • Em construções do tipo "int* a", os caracteres "*" e "&" se referem à variável, e não a um tipo, portanto, essa construção é substituída por "int *a";
  • Linhas em branco duplas são substituídas por uma.

Antes da formatação

Após a formatação

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)
              {
              }
           }
        }
     }
  }

O tamanho da tabulação do estilizador é sempre igual a três espaços, independentemente das opções do MetaEditor.

Exceções para substituições ao formatar levando em conta ao alinhamento de entre linhas

As regras de substituição do estilizador, mencionadas acima, não se aplicam em alguns casos. Isso é fornecido para não violar a justificação autoral nas linhas adjacentes. O estilizador reconhece o alinhamento entre linhas na linha seguinte para as seguintes palavras-chave e símbolos:

  • "//" – símbolos de comentário "C";
  • "{" – chave esquerda;
  • "}" – chave direita;
  • "return" – operador "return";
  • "delete" – operador "delete";
  • "=" – símbolo de igualdade;
  • ":" – dois-pontos;
  • "." – ponto.

Se, durante a análise de linha, o estilizador encontrar uma dessas palavras ou símbolos, mencionados acima, na mesma posição da linha anterior ou subsequente, nenhuma substituição será feita nela.

Formatação de funções e operadores

  • Antes dos símbolos "{" e "}", que abrem e fecham a função/operador, são definidos dois espaços a partir da declaração do tipo de função/operador.
  • Antes de cada linha entre os símbolos "{" e "}" da função/operador, três espaços são definidos desde o início da instrução.
  • Caso não existam caracteres "{" ou "}" de fechamento num operador com texto, esses símbolos e texto serão enviados para linhas diferentes.
  • Além disso, o alinhamento leva em conta o conteúdo da linha anterior. Se na linha anterior o colchete não está fechado ou a expressão aritmética não está completa, então a linha atual começará com a primeira posição após o "(" ou "=" da linha anterior.
  • Condição "else" é sempre definida em pé de igualdade com "if";

Antes da formatação

Após a formatação

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);
     }
  }

Alinhamento ao declarar estruturas, classes e enumerações

Em esse tipo de expressões, é usada a tabulação de dois níveis:

  • Três espaços são definidos antes de especificar o tipo de membro/método descrito;
  • Os nomes dos membros ou métodos descritos da estrutura ou classe são indicados a partir da posição 22 na linha;
  • Qualificadores de acesso a membros e métodos ("private", "protected", "private" e "virtual") são alinhadas pela palavra "class".

Antes da formatação

Após a formatação

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;
  };

Alinhamento de comentários

Há uma diferença no alinhamento de comentários em declarações e definições:

  • Comentários do primeiro nível, na definição da função ou método, são alinhados à esquerda (sem recuo);
  • Os comentários de primeiro nível, na declaração, são alinhados à terceira posição na linha.
  • Os comentários dos níveis seguintes são alinhados igualmente no nível correspondente dos operadores em que são indicados.

Antes da formatação

Após a formatação

void myFunction()  {
//--- comentários de primeiro nível
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);
//--- comentários de segundo nível
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
else {
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
}

void myFunction() 
  {
//--- comentários de primeiro nível
   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);
      //--- comentários de segundo nível
      if(!state)
         ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
   else 
     {
      ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
  }

class CTradePad
  {
private:
   int m_rows;
 //--- número de linhas
   int m_columns;   
              //--- número de colunas
   int m_button_width; 
//--- largura de compartimento
 
  };

class CTradePad
  {
private:
   int               m_rows;
   //--- número de linhas
   int               m_columns;
   //--- número de colunas
   int               m_button_width;
   //--- largura de compartimento
 
  };

Inserir comentários

Um comentário do tipo a seguir é inserido no cabeçalho do arquivo, se estiver faltando:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                    Copyright © 2009, CompanyName.|
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+

Comentários do seguinte tipo são inseridos antes de funções, classes, estruturas, etc. na sua ausência:

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

No final do arquivo, é inserido um comentário de corte do seguinte tipo:

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