Bonjour,
Je vais tenter d’expliquer en quelques mots ce qu’à fait James avec ce paquet spip-league / sdk · GitLab qui a été mis en dépendances de « dev » des plugins SPIP (core).
Le contenu est assez simple (du moins une partie) : on y déclare la signature des fonctions d’API de SPIP, avec leur typage.
Un des objectifs, c’est de pouvoir analyser le code d’un plugin, sans avoir tout SPIP chargé avec. Ces analyses sont fait avec phpstan
qui retourne certaines erreurs, avec ce qu’il comprends du code.
Mais lorsqu’il tombe par exemple sur spip_logger()
: il va dire, cette fonction n’existe pas, n’est pas définie (s’il analyse juste le répertoire du plugin), et cette fonction se retrouve alors dans la « baseline » de phpstan : une liste d’erreurs qu’on accepte de tolérer.
Le problème c’est que, étant donné que cette liste est très longue, l’outil a moins d’intérêt à être utilisé.
À partir du moment où on met en dépendance de dev ce SDK, et qu’on demande à charger certains fichiers dedans (dans la partie autoload-dev du composer.json), ce qui déclare la signature des fonctions d’API de SPIP (mais avec un contenu vide essentiellement donc), alors phpStan comprend que la fonction existe (et ses paramètres & retour), et peut indiquer des erreurs plus pertinentes dans le projet.
Les erreurs qui restent sont alors logiquement plus proches d’erreurs d’écriture dans le plugin, d’erreur de codage, que dues à une méconnaissance de PHPStan des fonctions. Le tout en ne chargeant pas tout SPIP en mémoire (genre dans vendor/)
Cela devrait permettre de corriger les erreurs que lève PHPStan avec son level=0, puis de monter progressivement le niveau d’analyse de PHPStan en level=1, puis 2… où il devient de plus en plus strict sur l’écriture.
Donc en gros, ça fait un peu ce que fait un IDE qui analyse le code et qui souligne : tiens là tu passes un paramètre en trop à la fonction, ou là tu passes un entier en paramètre alors que ça attend un tableau : ça permet de trouver et éviter de nombreuses erreurs bien plus rapidement en général.
Voilà, en espérant que ce résumé soit à peu près correct
Exemple d’une PR là dessus chore: spip-league/sdk (!4635) · Requêtes de fusion · spip / aide · GitLab