Retour au Blog

Rector et ses pouvoirs : maîtrisez l'évolution de votre vode Symfony

Rector et ses pouvoirs : maîtrisez l'évolution de votre vode Symfony

Qu'est ce que Rector ?

Rector est un outil PHP puissant conçu pour simplifier et améliorer la qualité du code PHP en automatisant les mises à niveau.

Selon le site de la documentation.

Rector est un outil PHP que vous pouvez exécuter sur n'importe quel projet PHP pour obtenir une mise à niveau instantanée ou une refactorisation automatisée. Il facilite les mises à niveau PHP, les mises à niveau du framework et améliore la qualité de votre code. En outre, cela aide à la couverture des types et à accéder au dernier niveau PHPStan.

En bref, il utilise PhpStan pour garantir la propreté du code et offre des méthodes pré-implémentées pour "nettoyer" le code.

Pré-requis

Avant de commencer à utiliser Rector, assurez-vous d'avoir les éléments suivants installés sur votre système : PHP & Composer https://getcomposer.org/

Installation

  1. Ouvrez votre terminal à la racine de votre projet
  2. Puis tapez la commande ci-dessous composer require rector/rector --dev

Initialisation

Il est possible de créer automatiquement le fichier de configuration, rector.php en tapant:

php vendor/bin/rector -n

Voici le fichier généré automatiquement :

return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
  __DIR__ . '/config',
   __DIR__ . '/public',
   __DIR__ . '/src',
   __DIR__ . '/tests',
 ]);  
 
 // register a single rule  
 $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
 
 // define sets of rules
 $rectorConfig->sets([  
    LevelSetList::UP_TO_PHP_82
 ]);};

Configuration

Basique

Le code ci-dessous du fichier “rector.php”, à la racine du projet.

return static function (RectorConfig $rectorConfig): void {
// Liste dossiers à traiter  
 $rectorConfig->paths([   
  __DIR__ . '/config',
   __DIR__ . '/public',
   __DIR__ . '/src',
   __DIR__ . '/tests',
 ]); 
 $rectorConfig->sets([
  // migration de php vers la version 8.3
   LevelSetList::UP_TO_PHP_83,
   // typer les retours des fonctions
   SetList::TYPE_DECLARATION,   
 ]);};

Ensemble de règles possibles

Il existe une multitude de règles pré-implémentées que vous pouvez retrouver ici. Il y a beaucoup de règles qui vont vous permettre de gagner du temps dans vos migrations, et amélioration de code sur Symfony notamment.

  • SetList::CODE_QUALITY
  • SetList::CODING_STYLE
  • SetList::NAMING

Vous trouverez la liste des règles d'amélioration de version pré-implémentées ici : https://github.com/rectorphp/rector/blob/main/packages/Set/ValueObject/LevelSetList.php

  • LevelSetList::UP_TO_PHP_80
  • LevelSetList::UP_TO_PHP_70

Pour un usage efficace, et éviter que vous et votre équipe ne se perdiez, l'équipe Efficience IT vous conseille de lancer une seule règle à la fois. Cela vous permettra de vous relire, de faire un commit et un PR, pour que tout le monde puisse relire et éviter quelconque désagrément. Plusieurs petits pas, valent mieux qu'un grand pas.

Ajouter une règle spécifique

Dans la documentation, vous pouvez choisir une règle que vous pouvez intégrer dans le fichier rector.php. Vous trouverez la liste ici : https://getrector.com/documentation/rules-overview

Prenons l'exemple de la règle "ReplaceMultipleBooleanNotRector"

Dans celui ci, rector va remplacer les opérateurs !! par un typage booléen

$bool = !!$var; ==> $bool = (bool) $var;

Il vous suffira simplement de l'ajoter dans le fichier comme ceci:

return static function (RectorConfig $rectorConfig): void { 
// [...] 
$rectorConfig->rules([
  ReplaceMultipleBooleanNotRector::class,
  ]);
};

Possibilité d'ignorer des fichiers/dossiers

Si vous souhaitez que Rector ne prenne pas en compte certains fichiers ou dossiers, vous pouvez ajouter la configuration ci-dessous :

$rectorConfig->skip([
SimplifyIfReturnBoolRector::class => [
  // Pour un fichier
   __DIR__ . '/src/ComplicatedFile.php',
   // Pour un dossier 
   __DIR__ . '/src/ComplicatedDirectory',
 ],
]);

Exemple d'une configuration pour Symfony

Dans cet exemple, nous allons effectuer une migration de version sur Symfony. Vers Symfony 6.0.

$rectorConfig->sets([
SymfonySetList::SYMFONY_60,
 SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES,
 SymfonySetList::SYMFONY_CODE_QUALITY,
 SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION
]);

Comment lancer ensuite l'exécution ?

Commandes basiques

Pour obtenir un aperçu des modifications proposées avant de les appliquer, utilisez la commande suivante :

// pour voir les modifications
php vendor/bin/rector process --dry-run
// pour executer
php vendor/bin/rector process
//Appliquer les modifications dans le dossier src
php vendor/bin/rector process src

Conclusion

Aussi puissant que soit Rector, il est impératif de procéder à des vérifications de l'application afin de détecter d'éventuelles erreurs (effet de bord).

Nous vous invitons pour celles et ceux qui souhaiteraient se faire accompagner dans cette migration, à faire appel à nos services dans la page Contact de l'entreprise.

Contactez-nous !
Je veux en savoir plus !