Reglas de Rector para Refactorizar Código PHP

Desde que empecé a usar Rector, se ha convertido en una de mis herramientas favoritas para refactorizar código PHP de manera automática. Me ha ayudado a mejorar la calidad de mi código y a mantenerlo actualizado sin esfuerzo. Aquí quiero compartir algunas de las reglas que más utilizo, con ejemplos prácticos que pueden serte útiles si decides integrarlo en tus proyectos.

1. Code Quality Rules (Reglas para Mejorar la Calidad del Código)

CombinedAssignRector

Esta regla convierte asignaciones repetitivas en una sola línea para hacer el código más limpio y legible.

Antes:

$counter = $counter + 1;

Después:

$counter += 1;

SimplifyEmptyArrayCheckRector

Simplifica las comprobaciones de arrays vacíos usando empty() en lugar de contar los elementos.

Antes:

if (count($array) === 0) {
    // código
}

Después:

if (empty($array)) {
    // código
}

2. Dead Code Rules (Reglas para Eliminar Código Muerto)

RemoveUnusedPrivateMethodRector

Elimina métodos privados que no están en uso. Me ha sido muy útil para limpiar clases antiguas.

Antes:

class MyClass {
    private function unusedMethod() {
        // código
    }
}

Después:

class MyClass {
    // Método eliminado
}

RemoveDeadStmtRector

Identifica y elimina sentencias que nunca se ejecutan.

Antes:

return;
$unusedCode = 'Esto nunca se ejecutará';

Después:

return;

3. Early Return Rules (Reglas para Retorno Temprano)

ChangeNestedIfsToEarlyReturnRector

Convierte estructuras if anidadas en retornos tempranos. Esto hace que el código sea mucho más fácil de leer.

Antes:

if ($value) {
    if ($value > 10) {
        return true;
    }
}

Después:

if (!$value) {
    return false;
}

if ($value > 10) {
    return true;
}

4. Type Declaration Rules (Reglas para Declaración de Tipos)

AddParamTypeFromPropertyTypeRector

Agrega tipos a los parámetros basados en el tipo de propiedad. Esto me ha ayudado a prevenir muchos errores.

Antes:

class MyClass {
    private int $id;

    public function setId($id) {
        $this->id = $id;
    }
}

Después:

class MyClass {
    private int $id;

    public function setId(int $id) {
        $this->id = $id;
    }
}

TypedPropertyFromAssignsRector

Agrega tipos a las propiedades basadas en las asignaciones que encuentra en el constructor u otros métodos.

Antes:

class MyClass {
    private $id;

    public function __construct() {
        $this->id = 123;
    }
}

Después:

class MyClass {
    private int $id;

    public function __construct() {
        $this->id = 123;
    }
}

5. Privatization Rules (Reglas para Privatización)

PrivatizeFinalClassPropertyRector

Convierte propiedades públicas en privadas dentro de clases finales para mejorar la encapsulación.

Antes:

final class MyClass {
    public $name;
}

Después:

final class MyClass {
    private $name;
}

6. Symfony Specific Rules (Reglas Específicas para Symfony)

ResponseReturnTypeControllerActionRector

Asegura que las acciones de los controladores devuelvan siempre un tipo Response. Esta regla es clave si trabajas con Symfony.

Antes:

public function index() {
    return 'Hello World';
}

Después:

use Symfony\Component\HttpFoundation\Response;

public function index(): Response {
    return new Response('Hello World');
}

7. Coding Style Rules (Reglas para Estilo de Código)

EncapsedStringsToSprintfRector

Convierte cadenas encapsuladas ("...") en sprintf() para mayor claridad.

Antes:

echo "Hello, $name!";

Después:

echo sprintf("Hello, %s!", $name);

ConsistentImplodeRector

Asegura el uso consistente de implode().

Antes:

implode(',', $array);

Después:

implode(',', $array);  // Ningún cambio, pero asegura consistencia en el orden de los parámetros.

8. Function Rules (Reglas para Llamadas a Funciones)

CallUserFuncToMethodCallRector

Convierte call_user_func() en una llamada directa al método.

Antes:

call_user_func([$this, 'methodName']);

Después:

$this->methodName();

ArrayMergeOfNonArraysToSimpleArrayRector

Simplifica la fusión de arrays cuando no es necesaria.

Antes:

$result = array_merge([], $array);

Después:

$result = $array;

9. Boolean Simplification Rules (Reglas para Simplificación de Booleanos)

SimplifyIfReturnBoolRector

Simplifica sentencias if que retornan directamente un valor booleano.

Antes:

if ($value) {
    return true;
} else {
    return false;
}

Después:

return (bool) $value;

10. Dead Code Elimination (Eliminación de Código Muerto)

RemoveUnusedPromotedPropertyRector

Elimina propiedades promovidas en constructores que no se utilizan.

Antes:

class MyClass {
    public function __construct(private string $unusedProperty) {}
}

Después:

class MyClass {
    public function __construct() {}
}

Conclusión

Desde que uso Rector, refactorizar mi código PHP se ha vuelto mucho más sencillo. Si todavía no lo has probado, te animo a que lo hagas. Es una herramienta que puede ahorrarte horas de trabajo y ayudarte a mantener tu proyecto limpio y actualizado.

Deja tu comentario

Tu dirección de email no será publicada. Los campos obligatorios están marcados con *