legĂ­vel - outro linter para PHP

Gostaria de apresentar um linter legível para PHP . Agora ele contém 16 regras que devem melhorar a legibilidade do código. As principais vantagens incluem:



  • velocidade - menos de um segundo por 1000 arquivos
  • configuração da linha de base - vocĂŞ nĂŁo pode corrigir todos os erros no projeto de uma sĂł vez, mas criar uma configuração com os erros atuais. E ignore-os, mas reaja aos novos.
  • regras sĂŁo mais fáceis de escrever do que análogos (subjetivos)




Duas isenções de responsabilidade importantes :



  1. Eu sou o principal colaborador, então posso ser subjetivo. Readable foi originalmente escrito para a empresa belga officient . Eles o usam internamente há algum tempo e decidiram tornar legível um projeto de código aberto.
  2. Está escrito em JS.


Instalação e lançamento



legĂ­vel Ă© instalado via npm:



$ npm install @officient/readable --save-dev


Após a instalação, você precisa criar um arquivo de configuração:



$ npx readable --init


E vocĂŞ pode executar:



$ npx readable


regras



Atualmente, existem 16 regras legĂ­veis:



  1. namespace-max-files - número máximo de arquivos no namespace
  2. substituição de argumento - proíbe alterar o valor dos argumentos da função
  3. file-max-size - o número máximo de linhas no arquivo
  4. empty-catch — catch
  5. class-comment — - ,
  6. forbidden-functions — (eval, print_r ...)
  7. missing-braces — if, for ...
  8. variable-length — ( $id, $i)
  9. function-max-size —
  10. loop-max-size —
  11. forbidden-function-prefix — . , checkSomething — , ?
  12. if-assigment — if
  13. complex-if — && || if
  14. ternary-max-length —
  15. loop-max-nest —
  16. max-nest —




readable , . — . , - , :



  1. readable . , .
  2. . , .


Vamos tomar a regra loop-max-size como um exemplo . Todo o seu cĂłdigo:



const loops = ['for', 'foreach'];

module.exports = {
  check(maxLines, tokens, report) {
    tokens.matchAll(loops, (token) => {
      const end = token.copy().step().stepToClosing(); // skip ()
      end.step().stepToClosing();
      const lines = (end.current().line - token.current().line);
      if (lines > maxLines) {
        report(`Loop is longer than ${maxLines} lines [${lines}].`, token.current());
      }
    });
  },
};


A regra declara:



  1. encontre tudo fore foreach.
  2. Pegue o próximo token .step(), será um parêntese aberto (. Vá para o parêntese de fechamento .stepToClosing().
  3. Repita o segundo passo, exceto para o corpo do loop ( {e }).
  4. Verifique a duração do corpo do ciclo.


Em vez de uma conclusĂŁo



Eu uso legível em meus projetos como um link adicional para código. Gosto de tudo, principalmente da linha de base (para ser justo, o Salmo também tem isso). Ele tem a oportunidade de ocupar o nicho do linter auxiliar.




All Articles