Refactoriza código PHP con Rector

Enviado por christian el

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.

Dinahosting: dominios y alojamiento web
My investor

Regístrate en MyInvestory tendrás un extra de 20€ ! :D

 

Menciona que vienes de mi parte y te llevas un regalo en tu primera inversión :)

Usa el código U048395 y te llevas un regalo en tu primera inversión :)

 

Usa el código 22c80f y te llevas un regalo en tu primera inversión :)