Siguiendo con posts anteriores sobre herramientas para medir y mejorar la calidad del software como PHP-CS-FIXER, PHPDEPEND, PHPLOC o PHPCPD, llegamos a otra gran herramienta que es PHPSTAN. Con esta herramienta podemos encontrar errores en la programación en PHP sin llegar a haber programado y ejecutado los tests de integración.
Es decir, esta herramienta llamada PHPSTAN:
https://phpstan.org/
..analiza el código fuente de forma estática, reportando en varios niveles de exigencia, errores en la programación con los que podemos ir mejorando todo, incluso sin tener tests programados.
Al grano, instalando PHPSTAN
Para esto basta con ir a línea de comandos y ejecutar lo siguiente:
composer require --dev phpstan/phpstan
..y se instalarán los vendors necesarios.
Lo siguiente que podemos querer configurar es un comando en el composer.json para poder lanzarlo sin tener que acordarnos de los parámetros. Añadiremos entonces lo siguiente:
"scripts": {
"test": "vendor/bin/phpunit --coverage-html=public/coverage/ --testdox tests/",
"check-stan": "vendor/bin/phpstan analyse src tests --xdebug --level=2",
"check-cpd": "vendor/bin/phpcpd src/",
"check-md": "vendor/bin/phpmd src/ text cleancode",
"check-loc": "vendor/bin/phploc src/ text cleancode",
"check-pdepend": "vendor/bin/pdepend --summary-xml=public/pdepend/summary.xml --jdepend-chart=public/pdepend/jdepend.svg --overview-pyramid=public/pdepend/pyramid.svg src/",
"cs-fix-src": "vendor/bin/php-cs-fixer fix src/ --rules=@Symfony --verbose",
"cs-fix-tests": "vendor/bin/php-cs-fixer fix tests/ --rules=@Symfony --verbose",
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd",
"geoip2:update": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
]
},
Comprobando errores en códigos fuentes con PHPSTAN
Con la configuración del apartado anterior, ahora podremos ir a línea de comandos y ejecutar lo siguiente:
composer check-stan
Y podremos ver por pantalla reportes como el siguiente:
Buenos dias
En la linea
«test»: «vendor/bin/phpunit –coverage-html=public/coverage/ –testdox»,
¿No falta especificar la carpeta con los tests?
Buenas tardes Antonio.
Pues tienes razón. Hay que especificar la carpeta de los tests en la línea que indicas, o especificarlo en el fichero phpunit.xml o phpunit.xml.dist del proyecto.
Muchas gracias por el aporte, lo edito ahora mismo.
Saludos!
Como añadido decir que PHPStan tiene 10 niveles (del 0 o minimo al maximo 9).
Los niveles son acumulativos asi que si usamos nivel 5 se estan comprobando los niveles 0-4 incluidos
Para mas detalle de los que se comprueba o no tenemos documentado aqui
https://phpstan.org/user-guide/rule-levels
Muchas gracias por el aporte Antonio!
Saludos.