legible - otro linter para PHP

Me gustaría presentar un linter legible en PHP . Ahora contiene 16 reglas que deberían mejorar la legibilidad del código. Las principales ventajas incluyen:



  • velocidad : menos de un segundo por 1000 archivos
  • configuración de línea de base : no puede corregir todos los errores en el proyecto a la vez, sino crear una configuración con los errores actuales. E ignórelos, pero reaccione a los nuevos.
  • las reglas son más fáciles de escribir que las analógicas (subjetivas)




Dos importantes renuncias de responsabilidad :



  1. Soy el principal contribuyente, por lo que puedo ser subjetivo. Legible fue originalmente escrito para el funcionario de la compañía belga . Lo han estado utilizando internamente durante algún tiempo y decidieron hacer legible un proyecto de código abierto.
  2. Está escrito en JS.


Instalación y lanzamiento



legible se instala a través de npm:



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


Después de la instalación, debe crear un archivo de configuración:



$ npx readable --init


Y puedes correr:



$ npx readable


reglas



Actualmente hay 16 reglas en legibles:



  1. namespace-max-files : número máximo de archivos en el espacio de nombres
  2. argumento-anulación - prohíbe cambiar el valor de los argumentos de la función
  3. file-max-size - el número máximo de líneas en el archivo
  4. empty-catch - prohibición de catchbloque vacío
  5. class-comment — - ,
  6. forbidden-functions — (eval, print_r ...)
  7. missing-bracesif, for ...
  8. variable-length — ( $id, $i)
  9. function-max-size
  10. loop-max-size
  11. forbidden-function-prefix — . , checkSomething — , ?
  12. if-assigmentif
  13. complex-if&& || if
  14. ternary-max-length
  15. loop-max-nest
  16. max-nest




readable , . — . , - , :



  1. readable . , .
  2. . , .


Tomemos la regla loop-max-size como ejemplo . Todo su 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());
      }
    });
  },
};


La regla establece:



  1. encuentra todo fory foreach.
  2. Tome la siguiente ficha .step(), será un paréntesis abierto (. Ir al paréntesis de cierre .stepToClosing().
  3. Repita el segundo paso pero para el cuerpo del bucle ( {y }).
  4. Verifique la longitud del cuerpo del ciclo.


En lugar de una conclusión



Utilizo legible en mis proyectos como un linter adicional para el código. Me gusta todo, especialmente la línea de base (para ser justos, el salmo también tiene esto). Tiene la oportunidad de ocupar el nicho de la fibra auxiliar.




All Articles