Comment écrire une règle Rector

JoliCode - JoliCodeBlog - 21/02
Afin de mettre à jour Symfony sur l’application d'un client, nous avons dû corriger quelques usages de Doctrine au préalable. Il y a quelques années de cela, il était commun d'écrire ce genre de code dans un contrôleur : La syntaxe : étant dépréciée,

Afin de mettre à jour Symfony sur l’application d’un client, nous avons dû corriger quelques usages de Doctrine au préalable. Il y a quelques années de cela, il était commun d’écrire ce genre de code dans un contrôleur :

$order = $this->getDoctrine()->getRepository('App:Order')->find($id);

La syntaxe <Namespace>:<EntityName> étant dépréciée, il faut mettre à jour en utilisant la syntaxe FQCN.

use App\Entity\Order; $order = $this->getDoctrine()->getRepository(Order::class)->find($id);

A travers cet article, nous verrons comment créer une règle custom Rector, qui répondra à ce besoin.

Mais quitte à écrire une règle, ne pouvons-nous pas corriger le code ci-dessus pour qu’il ne transgresse pas la loi de Demeter ?

use App\Repository\OrderRepository; class OrderController { public function __construct( private readonly OrderRepository $orderRepository, ) { } public function show(string $id) { $order = $this->orderRepository->find($id); //... } }

Section intitulée mise-en-place-de-rectorMise en place de rector

À JoliCode, nous n’aimons pas ajouter les outils directement aux applications Symfony :

  • Ils peuvent mettre en conflit certaines dépendances ;
  • Ils alourdissent le projet ;
  • Pour des projets avec plusieurs applications (micro ou macro services), il faut installer N fois les outils ;
  • « Ce n’est pas bien rangé ».

Nous avons l’habitude de les mettre dans le dossier tools/<outils> :

tools ├─ rector │ ├─ composer.json │ └─ composer.lock ├─ phpstan │ ├─ composer.json │ └─ composer.lock └─ php-cs-fixer ├─ composer.json └─ composer.lock

Dans le dossier tools/rector, nous avons le fichier composer.json suivant :

{ "type": "project", "license": "proprietary", "require": { "rector/rector": "^1.0.1" }, "require-dev": { "phpunit/phpunit": "^9.6.16", "symfony/var-dumper": "^5.4.35" }, "autoload": { "psr-4": { "App\\": "src/" } }, "autoload-dev": { "psr-4": { "App\\Tests\\": "tests/" } } }

Vous noterez que nous avons pris un peu d’avance en ajoutant :

  • symfony/var-dumper pour pouvoir utiliser dump() dans les tests et lors du debug ;
  • phpunit/phpunit pour pouvoir tester nos règles ;
  • l’autoloading de notre « application ».

Une fois les dépendances installées, nous pouvons créer la configuration de base.

$ cd tools/rector $ vendor/bin/rector No "rector.php" config fou...
[Courte citation de 8% de l'article original]
Loading...