Comment récupérer le nombre d'erreurs ignorées dans une analyse PHPStan
Je travaille au quotidien avec PHPStan que ce soit pour mes projets personnels, mais également professionnels. Pour des projets complexes et ayant plusieurs années d’existence, il n’est pas rare d’ajouter des règles d’analyses graduellement afin d’éviter un trop grand nombre d’erreurs à corriger (ou à ignorer) d’un seul coup. Aussi dans une optique d’amélioration continue, il peut être intéressant de suivre le nombre d’erreurs ignorées afin de pouvoir s’assurer que le chiffre diminue (ou n’augmente pas de manière disproportionnée) au fil du temps.
Malheureusement, c’est une information que PHPStan ne permet pas de récupérer simplement.
J’ai donc cherché une solution, car c’est une métrique que je cherche à suivre. L’idée étant d’avoir une idée de l’état du code et de détecter si une équipe a tendance à ignorer des erreurs relevées par l’analyse statique ou si au contraire, elle est dans une optique d’amélioration continue du code.
Lors de mes recherches, j’ai trouvé le projet phpstan-baseline-analysis qui permet d’analyser une baseline
PHPStan pour fournir un résumé de la typologie des erreurs qui sont présentes dans le fichier. C’est un outil intéressant, dont l’auteur Markus Staab, a publié un article pour présenter le projet. Bien qu’intéressant, il ne permet pas de déterminer le nombre d’erreurs réellement ignorées dans le projet. Se basant sur un fichier de configuration, le projet fait par exemple l’impasse sur les erreurs directement ignorées dans le code ou ne permet pas de compter avec précision les erreurs ignorées au travers d’une expression régulière.
Je me suis alors intéressé plus en détail au fonctionnement de PHPStan et à son mécanisme d’analyse. J’ai notamment pu découvrir le fonctionnement du système de cache. L’essentiel des informations est stocké dans un fichier unique (resultCache.php
), lequel contient l’ensemble des erreurs détectées. Ainsi, en analysant le contenu du fichier, en lisant les informations telles que errorsCallback
, locallyIgnoredErrorsCallback
et linesToIgnore
, il est possible de récupérer avec détails et précision, l’ensemble des erreurs présente dans la base de code (et ainsi de pouvoir en extraire des métriques).
C’est ainsi qu’est né phpstan-report
, une surcouche à PHPStan, capable de lancer une analyse et de lire le fichier de cache afin d’en extraire des métriques permettant de tracer et suivre l’évolution des erreurs de l’analyse statique.