Laravel Tooling: 4 herramientas útiles para análisis estático
- Andrés Cruz
¿Qué son las herramientas de análisis estático?
Para decirlo lo mejor que puedo, una herramienta de análisis estático analiza el código y toma decisiones sobre lo que ve. En esta lista, habrá herramientas que califican el rendimiento, descubren cosas como código no utilizado, observan y mejoran la legibilidad visual del código e incluso realizan actualizaciones del código.
Pint
Técnicamente, Pint es bastante nuevo como herramienta oficial de linting para Laravel. En primer lugar, se puede usar en cualquier proyecto PHP a pesar de estar hecho para Laravel y es un poco mejor que PHP CS Fixer que Pint usa bajo el capó. Linting es un nombre común para una herramienta de análisis estático que formatea el código e intenta aplicar pequeños cambios para que el código sea legible según un conjunto de estándares.
Al momento de escribir, la mayor parte del código PHP se desarrollará según lo que se conoce como el estándar PSR-12, también teníamos el estándar PSR-1 y ahora obsoleto PSR-2.
Los estándares de codificación PSR no cubren todo, aunque a menudo es una buena idea analizar qué reglas adicionales podría aplicar.
Las principales conclusiones y beneficios aquí son la legibilidad y la colaboración. Si trabaja solo, no necesariamente traerá grandes mejoras. Si trabaja en equipo y colabora regularmente, será de gran beneficio para todos. Algunos estándares PSR están ahí para ayudar a garantizar que las fusiones de código tengan menos conflictos. Del mismo modo, simplemente establecer un conjunto de reglas compartidas entre ustedes significa que el código se escribirá de manera que su cerebro lo vea y lo comprenda más rápido a partir de la memoria muscular.
PHPStan (y Larastan)
PHPStan está bien establecido como una herramienta útil para los desarrolladores de PHP en todo el mundo. El propósito de PHPStan es observar cómo interactúa el código; por ejemplo, puede observar el uso de una variable y encontrar si una variable de cadena se usará con una función como argumento de array. Por supuesto, esto sería un error en tiempo de ejecución si sucediera. Asimismo, PHPStan es capaz de encontrar código que ya no se utiliza.
PHPStan es increíblemente útil ya que muchos desarrolladores buscan aprovechar el tipo de sugerencia que PHP7 y PHP8 han impulsado. Sin embargo, esto no es fácil de hacer sin encontrar todos los lugares de un proyecto que no estén tipográficos. PHPStan puede hacer esto buscando dónde los argumentos o tipos de retorno no están documentados mediante una sugerencia de tipo o una etiqueta PHPDoc.
Incluso hay una gran funcionalidad para crear lo que se conoce como una línea de base si desea ignorar problemas pasados y centrarse únicamente en no introducir problemas nuevos.
Si está desarrollando un paquete o aplicación que utiliza Larastan, querrá instalar Larastan a través de PHPStan. Esto se debe a que la extensión comprenderá más de la magia que ocurre dentro de Laravel, como los modelos que tienen alcances y atributos dinámicos.
En resumen, el beneficio aquí realmente se reduce a detectar errores a tiempo. Cuanto más alto sea el nivel que establezca con PHPStan, más probable será que haya eliminado los errores tontos que encontrará en tiempo de ejecución y se haya salvado de dolorosos problemas de depuración en producción.
PHPInsights
Diré que, en general, esta herramienta es útil, pero puede resultar un poco abrumadora al principio. Aquí están en juego varias cosas diferentes del análisis estático. Insights le proporcionará 4 grupos de puntuaciones, código, complejidad, arquitectura y estilo.
Primero comenzaré con las ideas de estilo, esencialmente será exactamente el mismo tipo de procesamiento que Pint, pero es bueno al menos tener una puntuación. También detectará algunas otras cosas que Pint no detecta, como el recuento de líneas.
La complejidad es puramente ciclomática, que es una forma muy sencilla de decir cuántas ramas ocurren dentro del código. Quizás quieras repasar el concepto. Personalmente, encuentro que el valor predeterminado para esto es un poco bajo, por lo que normalmente lo incremento. Dicho esto, es una buena métrica para cuando las clases se vuelven difíciles de manejar.
Eso pasa a la siguiente categoría de arquitectura. Esto cubre algunas cosas, pero a menudo son simples convenciones de nomenclatura o la duración de funciones o clases. Nuevamente, normalmente aumentaría la duración de las clases permitidas, ya que no me gusta que me exijan estándares tan altos y termino creando muchas clases solo para encapsular una funcionalidad simple de inmediato.
La estadística final es código y en realidad sigue muchas de las cosas similares que puedes encontrar con PHPStan o Pint. Estos pueden variar desde variables inútiles hasta evitar el uso de algunas funciones debido a que pueden ser impredecibles. A veces puede ser un poco obstinado, así que elimine algunas reglas si solo le generan más ruido.
En última instancia, diría que Insights es interesante y excelente como herramienta para evaluar la calidad del código rápidamente y luego usar esa puntuación inicial para ver si se está moviendo en la dirección correcta al refactorizar el código, pero definitivamente necesita tomarse el tiempo para formarse su propia opinión. sobre qué reglas se utilizan y no se utilizan al generar dichas métricas.
Rector
Así que esta herramienta es, en muchos sentidos, mi nuevo juguete favorito dentro del conjunto de herramientas de análisis estático. Está construido sobre componentes de PHPStan para poder brindarte todas esas bondades de sugerencias tipográficas, pero va más allá.
Artículo original:
https://articles.peterfox.me/laravel-static-analysis-tools-cdc744f11ee6
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter