lisible - un autre linter pour PHP

Je voudrais vous présenter un linter lisible en PHP . Il contient désormais 16 règles qui devraient améliorer la lisibilité du code. Les principaux avantages comprennent:



  • vitesse - moins d'une seconde pour 1000 fichiers
  • paramètre de base - vous ne pouvez pas corriger toutes les erreurs du projet Ă  la fois, mais crĂ©er une configuration avec les erreurs actuelles. Et ignorez-les, mais rĂ©agissez aux nouvelles.
  • les règles sont plus faciles Ă  Ă©crire que les analogues (subjectif)




Deux avertissements importants :



  1. Je suis le principal contributeur, donc je peux être subjectif. Readable a été initialement écrit pour le dirigeant belge . Ils l'utilisent en interne depuis un certain temps maintenant et ont décidé de rendre lisible un projet open source.
  2. Il est Ă©crit en JS.


Installation et lancement



readable est installé via npm:



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


Après l'installation, vous devez créer un fichier de configuration:



$ npx readable --init


Et vous pouvez exécuter:



$ npx readable


règles



Il existe actuellement 16 règles en lecture:



  1. namespace-max-files - nombre maximum de fichiers dans l'espace de noms
  2. argument-override - interdit de changer la valeur des arguments de fonction
  3. file-max-size - le nombre maximum de lignes dans le fichier
  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. . , .


Prenons la règle loop-max-size comme exemple . Tout son code:



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


La règle stipule:



  1. trouver tout foret foreach.
  2. Prenez le jeton suivant .step(), ce sera une parenthèse ouverte (. Accédez à la parenthèse fermante .stepToClosing().
  3. Répétez la deuxième étape mais pour le corps de la boucle ( {et }).
  4. VĂ©rifiez la longueur du corps du cycle.


Au lieu d'une conclusion



J'utilise readable dans mes projets comme linter supplémentaire pour le code. J'aime tout, en particulier la ligne de base (en toute honnêteté, Psalm a aussi ça). Il a l'opportunité d'occuper la niche du linter auxiliaire.




All Articles