Configurer PHPStan et Phpactor pour WordPress et WooCommerce
J'utilise PHPStan depuis la version 1.0 (2021). Cet aide-mémoire est toujours valable pour la version 1.9. J'utilise Phpactor depuis la version 0.17 (2021). Cet aide-mémoire est toujours valable pour la version d'octobre 2022. Je les utilise principalement via Vim-ALE. Quand PHPStan et Phpactor analysent du code écrit pour fonctionner avec WordPress et éventuellement WooCommerce, que ce soit un plugin ou un thème WordPress, ils hurlent des choses comme "Function wp_mail not found" ou "Instantiated class WC_Order not found". Voici ce qu'il faut faire pour éviter ça.
-
D'abord installer PHPStan dans le projet :
composer require --dev phpstan/phpstan
. Vim-ALE le lance aussitôt. -
Phpactor est installé dans
/usr/local/bin
selon la méthode recommandée. Il suffit de créer un dépôt git ou d'installer des dépendances par composer pour qu'il soit lancé par Vim-ALE. Sinon, dans:ALEInfo
on peut lire :
LSP Error Messages: (Errors for phpactor) Failed to find project root, language server won't start.
-
Sans aller jusqu'à leur faire analyser WP ou WC, ce qui serait long et inutile, il faut leur faire découvrir les symboles de WP et WC comme ceci :
Ajouter les stubs des fonctions de WordPress (le squelette des fonctions) :-
composer require --dev php-stubs/wordpress-stubs
-
puis créer le fichier
phpstan.neon
parameters: level: max bootstrapFiles: - %rootDir%/../../php-stubs/wordpress-stubs/wordpress-stubs.php
-
-
Si c'est du code qui interagit avec WooCommerce
-
ajouter aussi les stubs de WooCommerce :
composer require --dev php-stubs/woocommerce-stubs
-
et ajouter dans le fichier phpstan.neon :
parameters: bootstrapFiles: - %rootDir%/../../php-stubs/woocommerce-stubs/woocommerce-stubs.php
-
ajouter aussi les stubs de WooCommerce :
-
Note pour PHPStan :
bootstrapFiles
n'est pas la même chose quescanFiles
ouscanDirectories
. Comme indiqué dans la doc, PHPStan exécute les fichiers de stubs qu'on lui indique parbootstrapFiles
, alors qu'il va juste lire les fichiers indiqués parscanFiles
ouscanDirectories
.scanFiles
etscanDirectories
servent dans le cas où on a du logiciel tiers (inclus parinclude
ourequire
etc, mais pas dans les dépendances de Composer) et on ne veut pas que PHPStan hurle qu'il ne connaît pas les classes, variables ou fonctions qui sont définies dans ce logiciel tiers. -
Pour que Phpactor utilise également ces stubs, il faut lancer dans le projet
phpactor index:build
- Il écrit son index dans
~/.cache/phpactor/index/
- Pour réindexer, cf
phpactor --help
- Il écrit son index dans
Note sur une erreur rencontrée début 2023
Un jour, en revenant dans un vieux projet, j'ai vu Vim-ALE cracher ces messages :
(messages pas faciles à lire parce qu'ils ne s'affichaient qu'une fraction de seconde… j'ai surligné l'important en jaune)
Il s'avère que j'avais une vieille version de phpstan dans ce projet : 1.2.0. J'ai mis à jour phpstan dans la dernière version (1.10.1 à ce moment-là) par composer update phpstan/phpstan
et l'erreur a disparu.