Avez vous des règles personnalisées pour PHPStan ?
Coucou la commu,
Tout d'abord je vous souhaite une merveilleuse année, que vos projets se réalisent !
Le tweet de Ludo (@NordCoders) au sujet de la pluralisation ou non de nos contrôleurs m'a fait repenser à la vidéo de Frédéric Bouchery sur son utilisation de phpunit pour vérifier les règles de conception de son équipe.
Et cela m'a donné l'idée d'en faire une, avec PHPStan, qui vérifiera que les contrôleurs sont au pluriel.
A noter que c'est un choix d'équipe et pas nécessairement une bonne pratique. D'ailleurs, je commence à être adepte du "Single Action Controller", qui signifie dédier un contrôleur à une unique tache.
Bref, c'était l'occasion de jouer avec PHPStan dont voici la règle en question :
1namespace Rules; 2 3use Illuminate\\Support\\Str; 4use PhpParser\\Node; 5use PHPStan\\Rules\\Rule; 6use PHPStan\\Analyser\\Scope; 7 8class PluralControllerNameRule implements Rule 9{10 public function getNodeType(): string11 {12 return \\PHPStan\\Node\\InClassNode::class;13 }14 15 public function processNode(Node $node, Scope $scope): array16 {17 if (! str_starts_with($scope->getNamespace(), 'App\\Http\\Controllers')) {18 return [];19 }20 21 $reflectionClass = $node->getClassReflection();22 23 // ex: App\Http\Controllers\UserController24 $fullName = $reflectionClass->getName();25 26 if ($fullName === 'App\\Http\\Controllers\\Controller') {27 return [];28 }29 30 // Extraction du nom de la classe sans le suffixe, ex: User31 $name = Str::of($fullName)->match('/(\\w+)Controller$/')->value();32 33 if ($name !== Str::pluralStudly($name)) {34 return [35 "Controllers should be in plural form, expected '" . Str::pluralStudly($name) . "Controller'"36 ];37 }38 39 return [];40 }41}
Vous remarquerez que j'utilise la classe Str
de Laravel pour me simplifier la vie.
Et vous ? Avez-vous des règles de PHPStan dédiées à vos besoins ?
Ciao
Hi,
C'est top, Arkitect pouvait également répondre à ce besoin mais de manière moins précise, sans avoir accès à l'arbre syntaxique !
Cela peut être conjugué avec les baselines
pour mettre sous le tapis toutes les erreurs actuelles ?
J'avoue ne pas avoir testé mais j'image que oui avec une conf semblable à celle ci :
1parameters:2 ignoreErrors:3 -4 message: "#^Controllers should be in plural form, expected .*Controller.$#"5 count: 16 path: app/Http/Controllers
Bien que Arkitect soit grandement paramétrable, j'aime bien ce que propose phpstan là, ca me semble plus complet.