Retour sur le forum PHP 2024
Revivez les moments forts du Forum PHP 2024 avec l'AFUP ! Découvrez l'avenir du PHP et les innovations qui feront la différence.
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.
Avant de commencer à utiliser Rector, assurez-vous d'avoir les éléments suivants installés sur votre système : PHP & Composer https://getcomposer.org/
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
]);};
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,
]);};
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.
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
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.
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
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,
]);
};
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',
],
]);
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
]);
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
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.