Outils de qualité
Ce guide couvre PHPStan, PHP-CS-Fixer et les problèmes courants lors de leur exécution dans des projets basés sur NENE2.
PHPStan
NENE2 cible le niveau 8 de PHPStan. Les projets consommateurs qui installent hideyukimori/nene2 via Composer peuvent configurer PHPStan pour leur propre source dans un fichier phpstan.neon.
Configuration minimale
neon
# phpstan.neon
parameters:
level: 8
paths:
- src
- testsLimite mémoire
PHPStan peut manquer de mémoire lors de l'analyse d'un projet qui importe de nombreux packages vendor (nene2 + psr/* + nyholm/psr7 + les stubs phpunit s'accumulent rapidement). La limite mémoire PHP par défaut est de 128 Mo, ce qui est souvent trop bas.
Dans PHPStan 2.x, memory_limit est une option CLI uniquement — elle ne peut pas être définie dans phpstan.neon.
Passez-la sur la ligne de commande à la place :
bash
phpstan analyse --level=8 --memory-limit=512M src testsOu définissez-la dans la section scripts de composer.json pour qu'elle s'applique de manière cohérente :
json
{
"scripts": {
"analyse": "phpstan analyse --level=8 --memory-limit=512M src tests",
"check": ["@test", "@analyse", "@cs"]
}
}Note : Ajouter
memory_limit: 512Msousparameters:dansphpstan.neonprovoqueInvalid configuration: Unexpected item 'parameters › memory_limit'.dans PHPStan 2.x. Utilisez le flag CLI à la place.
Supprimer les faux positifs
Si PHPStan émet un faux positif qui ne peut pas être corrigé (ex. une incompatibilité PHPDoc dans une classe vendor), utilisez une ignorance en ligne :
php
/** @phpstan-ignore-next-line */
$value = $externalLib->getSomething();Ou ajoutez un fichier de baseline :
bash
phpstan analyse --generate-baselinePHP-CS-Fixer
NENE2 utilise @PSR12 comme jeu de règles de base, plus strict_param et declare_strict_types.
Configuration minimale
Créez .php-cs-fixer.php à la racine du projet :
php
<?php
$finder = PhpCsFixer\Finder::create()->in([__DIR__ . '/src', __DIR__ . '/tests']);
return (new PhpCsFixer\Config())
->setRiskyAllowed(true)
->setRules([
'@PSR12' => true,
'strict_param' => true,
'declare_strict_types' => true,
])
->setFinder($finder);Problèmes de formatage courants
Expansion du corps de constructeur : @PSR12 requiert que les corps de constructeur s'étendent sur plusieurs lignes même quand ils sont vides. CS-Fixer développe automatiquement :
php
// Avant (écrit à la main)
public function __construct(private Foo $foo) {}
// Après la correction CS-Fixer
public function __construct(private Foo $foo)
{
}Exécutez composer cs:fix après avoir écrit de nouvelles classes pour éviter les corrections manuelles.
Placement de declare(strict_types=1) : La règle declare_strict_types ajoute cette déclaration automatiquement. Si vous l'écrivez manuellement, CS-Fixer normalisera les espaces autour d'elle.
Dry-run vs correction
bash
composer cs # dry-run, montre ce qui changerait
composer cs:fix # applique les correctionsCombiner les vérifications
Ajoutez un script composer check qui exécute tous les outils en séquence :
json
{
"scripts": {
"test": "phpunit",
"analyse": "phpstan analyse --level=8 --memory-limit=512M src tests",
"cs": "php-cs-fixer fix --dry-run --diff",
"cs:fix": "php-cs-fixer fix",
"check": ["@test", "@analyse", "@cs"]
}
}Exécutez composer check avant chaque commit pour détecter les problèmes tôt. La CI devrait exécuter la même commande.