Ahora que estoy en medio de varios proyectos de migración de código a últimas versiones (pasar de php 7.4 a 8.X o pasar de Symfony 4 a 7) me estoy dando cuenta de que es bastante tedioso a la hora de refactorizar código.
En muchos casos son tareas repetitivas (forzar tipado de campos, uso de atributos y no anotaciones, etc...) que claramente hay que automatizar.
Como estaos en el boom de "esto con la IA lo hacemos antes"... voy a pasar de ella y buscar herramientas que se encarguen de esto (como hacíamos hace 6 meses...)
Buscando, he encontrado Rector. Y ya te lo digo antes de que me preguntes: He acabo mucho antes que con la IA
Qué es Rector?
Básicamente es una utilidad para código PHP que ejecuta tareas de refactorización y actualización de código de forma automática y estandarizada.
Qué te permite esto? pues:
- Olvidarte de tener que migrar manualmente funciones incompatibles entre versiones
- Si usas frameworks como Symfony, también te actualiza configuraciones, mapeos, etc...
- Incluso si quieres que tu código cumpla con los estándares de codificación(estilos, comentarios), lo puedes hacer con esta herramienta
Instalación
Aquí sabes que voy al grano. Es muy muy sencillo, te dejo por aquí unos comandos:
# En tu proyecto con composer
composer require rector/rector --dev
# La primera vez, como no tienes el fichero rector.php, te lo crea
vendor/bin/rector
Configuración
Tiene muuchas opciones para configurar. Te dejo por aquí la URL a la docu (https://getrector.com/documentation) pero te dejo por aquí algunos ejemplos de configuración del fichero rector.php
1) Configuración básica con 2 paths a ejecutar
<?php
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\SetList;
return RectorConfig::configure()
->withPaths([
__DIR__ . '/src',
__DIR__ . '/tests',
])
->withPreparedSets(deadCode: true);
2) Configuración para migrar anotaciones a atributos
<?php
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\SetList;
return RectorConfig::configure()
->withPaths([
__DIR__ . '/src',
__DIR__ . '/tests',
])
->withAttributesSets()
->withPreparedSets(deadCode: true);
3) Configuración para aplicar documentación y estilos de código estricto (nivel 0)
<?php
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\SetList;
return RectorConfig::configure()
->withPaths([
__DIR__ . '/src',
__DIR__ . '/tests',
])
->withDeadCodeLevel(0)
->withCodeQualityLevel(0)
->withCodingStyleLevel(0);
Como ves, hay un montón de variantes y opciones de configuración pero es bastante sencillo de definir lo que quieres.





