vendredi 25 septembre 2026

À propos

Contact

Tests

PHPStan au niveau maximal sur un projet existant grâce à la baseline

Générer une baseline pour geler les erreurs existantes, monter les niveaux d'analyse progressivement, et empêcher toute nouvelle erreur de s'ajouter au projet.

Par Clément Hadrot • 26 mai 2023 • 4 min de lecture • Aucun commentaire
PHPStan au niveau maximal sur un projet existant grâce à la baseline

Une extension de 15 000 lignes, jamais analysée statiquement depuis sa création, générait plus de 3 000 erreurs dès le premier lancement de PHPStan au niveau 5. Corriger l’existant avant de pouvoir seulement activer l’outil en intégration continue aurait immobilisé l’équipe pendant des semaines. La baseline résout précisément ce problème : elle permet d’activer PHPStan immédiatement, en gelant les erreurs déjà présentes, tout en bloquant toute nouvelle erreur introduite à partir de maintenant.

Le principe est simple : PHPStan génère un fichier listant chaque erreur actuelle avec sa localisation exacte, puis ignore ces erreurs précises lors des analyses suivantes. Toute erreur qui n’est pas dans ce fichier de baseline fait échouer l’analyse, ce qui empêche mécaniquement la dette technique de grossir davantage, même sans la résorber immédiatement.

Générer la baseline initiale

composer require --dev phpstan/phpstan

vendor/bin/phpstan analyse src --level 5 --generate-baseline

Cette commande crée un fichier phpstan-baseline.neon, à inclure dans la configuration principale :

# phpstan.neon
includes:
    - phpstan-baseline.neon

parameters:
    level: 5
    paths:
        - src

À partir de ce moment, vendor/bin/phpstan analyse passe au vert immédiatement, malgré les 3 000 erreurs toujours présentes dans le code — elles sont gelées, pas résolues.

Monter les niveaux progressivement

PHPStan propose des niveaux de 0 à 9 (parfois appelé max), chacun ajoutant des vérifications plus strictes que le précédent. Sauter directement au niveau 9 sur un projet non préparé génère une explosion d’erreurs difficile à trier. La bonne pratique consiste à monter d’un niveau à la fois, en régénérant la baseline à chaque palier :

vendor/bin/phpstan analyse src --level 6 --generate-baseline
vendor/bin/phpstan analyse src --level 7 --generate-baseline
L'essentiel à retenir : La baseline gèle les erreurs existantes sans les corriger ; Monter d'un niveau à la fois, jamais directement au niveau maximal ; Interdire toute nouvelle entrée dans la baseline en CI

Chaque montée de niveau élargit la baseline avec les nouvelles erreurs détectées à ce niveau, mais le code déjà propre au niveau précédent reste protégé contre toute régression future à ce même niveau.

Empêcher la baseline de grossir en continu

Le vrai danger d’une baseline mal surveillée est qu’un développeur pressé régénère la baseline à chaque nouvelle erreur au lieu de la corriger, ce qui vide l’outil de son intérêt. Deux garde-fous limitent ce risque :

  • Interdire dans les règles de contribution la régénération de la baseline sans justification explicite en revue de code
  • Suivre le nombre de lignes du fichier phpstan-baseline.neon dans le temps : une baseline qui grossit à chaque sprint signale un problème d’équipe, pas seulement un problème de code
  • Fixer un objectif trimestriel de réduction du nombre d’entrées dans la baseline, même modeste

La baseline n’est pas un tapis sous lequel on cache la poussière indéfiniment. C’est un point de départ honnête : elle dit exactement ce qui reste à corriger, ligne par ligne, plutôt que de prétendre que tout va bien.

Résorber la baseline module par module

Plutôt que de viser une correction massive, traiter la baseline fichier par fichier lors de tout passage dans une zone de code, même pour une autre raison, permet de la réduire organiquement. Corriger les cinq erreurs d’un fichier qu’on modifie déjà pour une fonctionnalité coûte marginalement peu, comparé à une campagne de nettoyage dédiée qui n’arrive jamais à être priorisée.

En résumé

La baseline permet d’introduire PHPStan sur un projet existant sans blocage immédiat, à condition de la traiter comme une dette à rembourser plutôt que comme une case cochée définitivement. L’installation et la configuration initiale de PHPStan pour un nouveau projet, sans historique d’erreurs à gérer, ne pose pas ce problème et ne nécessite pas cette étape.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi