Absortio

Email → Summary → Bookmark → Email

GitHub - rectorphp/rector: Instant Upgrades and Automated Refactoring of any PHP 5.3+ code

Extracto

Instant Upgrades and Automated Refactoring of any PHP 5.3+ code - rectorphp/rector

Resumen

Resumen Principal

Rector es una herramienta esencial para la modernización y mantenimiento del código PHP, diseñada para automatizar dos áreas críticas: las actualizaciones instantáneas y la refactorización automatizada. Permite a los desarrolladores mantener sus aplicaciones al día con las últimas versiones de PHP (desde la 5.3 hasta la 8.5) y frameworks populares como Symfony, PHPUnit y Doctrine, minimizando el esfuerzo manual. Más allá de las actualizaciones, Rector se posiciona como un guardián de la calidad del código, integrándose en los procesos de Integración Continua (CI) para realizar refactorizaciones inteligentes y continuas. Esto garantiza una consistencia en el estilo y las buenas prácticas, incluso con equipos grandes o rotación de personal, liberando a los desarrolladores senior para tareas de mayor valor. Su capacidad de operar mediante reglas individuales o conjuntos predefinidos, junto con un modo de "simulación" (dry-run), lo convierte en una solución potente y controlable para transformar y evolucionar bases de código PHP de manera eficiente.

Elementos Clave

  • Actualizaciones y Refactorización Automatizadas: Rector se especializa en dos funciones principales: la actualización de versiones PHP (5.3 a 8.5) y frameworks como Symfony, y la refactorización continua para mantener la alta calidad del código. Esta dualidad permite a las aplicaciones evolucionar tecnológicamente y a los equipos mantener estándares de código rigurosos sin intervención manual constante.
  • Configuración Flexible y Ejecución Controlada: La herramienta se instala vía Composer (composer require rector/rector --dev) y se configura mediante un archivo rector.php, donde los usuarios pueden definir reglas específicas o aplicar conjuntos predefinidos para la calidad del código o la eliminación de código muerto. Su modo dry-run (vendor/bin/rector src --dry-run) es fundamental para visualizar los cambios propuestos antes de aplicarlos definitivamente, ofreciendo un control total sobre el proceso de transformación.
  • Ecosistema Comunitario y Extenso Soporte: Rector se beneficia de una comunidad activa que desarrolla y mantiene "sets" específicos para proyectos conocidos como Drupal, Craft CMS, Shopware, TYPO3, Sylius y Laravel, entre otros. Esta colaboración asegura que la herramienta sea relevante y adaptable a una amplia gama de contextos de desarrollo PHP, facilitando su adopción y eficacia.
  • Recursos de Aprendizaje y Soporte Profesional: La plataforma ofrece una documentación completa, la posibilidad de explorar sus reglas, y un libro titulado "Rector - The Power of Automated Refactoring" para profundizar en su funcionamiento interno y la creación de reglas personalizadas. Además, sus desarrolladores ofrecen soporte comercial para organizaciones que buscan aplicar Rector en sus proyectos pero carecen del tiempo o la experiencia para manejar las complejidades del AST.

Análisis e Implicaciones

Rector implica una transformación significativa en el ciclo de vida del desarrollo PHP, al automatizar tareas que tradicionalmente consumen mucho tiempo y son propensas a errores, asegurando que las bases de código se mantengan modernas, robustas y consistentes a lo largo del tiempo. Su integración en CI/CD fomenta una cultura de mejora continua y la adopción de buenas prácticas de ingeniería de software a escala.

Contexto Adicional

La funcionalidad de Rector se basa en la tecnología del árbol de sintaxis abstracto (AST) a través de nikic/php-parser, y se recomienda complementar su uso con una herramienta de estándares de codificación como ECS para asegurar un formato de código óptimo después de las refactorizaciones.

Contenido

Rector - Instant Upgrades and Automated Refactoring

Downloads

Rector instantly upgrades and refactors the PHP code of your application. It can help you in 2 major areas:

1. Instant Upgrades

Rector now supports upgrades from PHP 5.3 to 8.5 and major open-source projects like Symfony, PHPUnit, and Doctrine. Do you want to be constantly on the latest PHP and Framework without effort?

Use Rector to handle instant upgrades for you.

2. Automated Refactoring

Do you have code quality you need, but struggle to keep it with new developers in your team? Do you want to see smart code-reviews even when every senior developers sleeps?

Add Rector to your CI and let it continuously refactor your code and keep the code quality high.

Read our blogpost to see how to set up automated refactoring.

Install

composer require rector/rector --dev

Running Rector

There are 2 main ways to use Rector:

  • a single rule, to have the change under control
  • or group of rules called sets

To use them, create a rector.php in your root directory:

And modify it:

use Rector\Config\RectorConfig;
use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictConstructorRector;

return RectorConfig::configure()
    // register single rule
    ->withRules([
        TypedPropertyFromStrictConstructorRector::class
    ])
    // here we can define, what prepared sets of rules will be applied
    ->withPreparedSets(
        deadCode: true,
        codeQuality: true
    );

Then dry run Rector:

vendor/bin/rector src --dry-run

Rector will show you diff of files that it would change. To make the changes, drop --dry-run:

Documentation

Learn Faster with a Book

Are you curious, how Rector works internally, how to create your own rules and test them and why Rector was born? Read Rector - The Power of Automated Refactoring that will take you step by step through the Rector setup and how to create your own rules.

Empowered by Community ❤️

The Rector community is powerful thanks to active maintainers who take care of Rector sets for particular projects.

Among there projects belong:

Hire us to get Job Done 💪

Rector is a tool that we develop and share for free, so anyone can automate their refactoring. But not everyone has dozens of hours to understand complexity of abstract-syntax-tree in their own time. That's why we provide commercial support - to save your time.

Would you like to apply Rector on your code base but don't have time for the struggle with your project? Hire us to get there faster.

How to Contribute

See the contribution guide or go to development repository rector/rector-src.

Debugging

You can use --debug option, that will print nested exceptions output:

vendor/bin/rector src/Controller --dry-run --debug

Or with Xdebug:

  1. Make sure Xdebug is installed and configured
  2. Add --xdebug option when running Rector
vendor/bin/rector src/Controller --dry-run --xdebug

To assist with simple debugging Rector provides 2 helpers to pretty-print AST-nodes:

use PhpParser\Node\Scalar\String_;
$node = new String_('hello world!');

// prints node to string, as PHP code displays it
print_node($node);

Known Drawbacks

  • Rector uses nikic/php-parser, built on technology called an abstract syntax tree (AST). An AST doesn't know about spaces and when written to a file it produces poorly formatted code in both PHP and docblock annotations.

  • Rector in parallel mode will work most of the times for most OS. On Windows, you may encounter issues unresolvable despite of following the Troubleshooting Parallel guide. In such case, check if you are using Powershell 7 (pwsh). Change your terminal to command prompt (cmd) or bash for Windows.

How to Apply Coding Standards?

Your project needs to have a coding standard tool and a set of formatting rules, so it can make Rector's output code nice and shiny again.

We're using ECS with this setup.

May cause unexpected output on File with mixed PHP+HTML content

When you apply changes to files with PHP + HTML content, you may need to manually verify the changed file after apply the changes.

Fuente: GitHub