Introduction à Rector
Issu de https://wiki.doing.fr/books/migration-php-8/page/rector
https://github.com/rectorphp/rector
Documentation de Bruno : https://wiki.doing.fr/books/migration-vers-php81/page/travailler-avec-rector
Et documentation de Stef :
Rector repose principalement sur PHP Parser et PhpStan qui sont de puissants outils d'analyse. Il offre un catalogue de plusieurs centaines de règles prédéfinies qui continue de s'étoffer avec le temps. C'est un outil de refactoring dont l'objectif n'est pas de détecter les erreurs mais de transformer le code, par exemple dans le but de modifier l'implémentation d'une méthode, de garantir un niveau de qualité de code, de migrer un projet de Symfony 5 à 6 ou encore de Php 7 à 8, etc.
Rector parait être un outil de migration efficace qui fonctionne de manière "quasi-automatique". Malheureusement, il semble impossible de traiter le projet dans son intégralité : impossible par exemple d'inclure le répertoire core/ du projet sans que Rector n'échoue après de longues minutes d'attente. Même constat en ciblant le dossier mPDF/, juste pour voir (on pourrait avoir besoin de migrer une lib qui n'est plus maintenue). Toutefois en se concentrant sur le dossier modules/ l'opération se termine avec succès en moins d'une minute, sans rencontrer de problème.
On installe Rector dans le répertoire du projet avec composer et on l'initialise :
$ composer require rector/rector --dev$ vendor/bin/rector initCela crée pour nous le fichier rector.php qu'il s'agit de modifier selon ses besoins (ici en ciblant le dossier modules/ et php8.1).
<?phpdeclare(strict_types=1);use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;use Rector\Config\RectorConfig;use Rector\Set\ValueObject\LevelSetList;return static function (RectorConfig $rectorConfig): void { $rectorConfig->paths([ __DIR__ . '/modules', ]); $rectorConfig->sets([ LevelSetList::UP_TO_PHP_81 ]); $rectorConfig->skip([ __DIR__ . '/core', __DIR__ . '/vendor', __DIR__ . '/ressources', __DIR__ . '/lib/externe', __DIR__ . '/core/lib/externe', ]);};On exécute rector avec l'option --dry-run pour afficher un diff des changements sans les appliquer (en cas de soucis pour relancer l'opération : utiliser l'option --clear-cache).
$ vendor/bin/rector --dry-runOn peut en faire un patch en redirigeant la sortie vers un fichier .diff.
$ vendor/bin/rector --dry-run 2>&1 > rector.diffCe qui permet aussi de le consulter en couleur, dans SublimeText par exemple :
Dans mon cas je crée une branche de test tandis que je complèterai ensuite le fichier .gitignore sur ma branche de dev, par précaution.
/composer.lock/composer.json/rector.diff/rector.php/vendorEt j'applique les changements
$ vendor/bin/rector --clear-cache[OK] 108 files have been changed by RectorOn peut voir que les règles sont bien appliquées :
- Le typage strict est pris en compte (cf.
strict_types=1dans la conf de rector) - Les
array()sont remplacés par des crochets - Certaines fonctions sont complétées, comme
setcookie()oujson_encode() - Le problème de typage avec
count()est géré via une ternaire utilisantis_countable() - etc.
| Vues | |
|---|---|
| 10 | Total des vues |
| 10 | Vues Membres |
| 0 | Vues publiques |
| Actions | |
|---|---|
| 0 | Aime |
| 0 | N'aime pas |
| 0 | Commentaires |
Partager par email
S'il vous plaît S'identifier afin de partager ce webpage par email



