rector README

The project's README from github.com/rectorphp/rector. As one markdown file: README.md.

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:

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

vendor/bin/rector

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:

vendor/bin/rector src

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 :heart:

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 :muscle:

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

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.

rector (rectorphp/rector)

Searching Database…

10.4K ·GitHub
What is this?Rector is a PHP tool that instantly upgrades and refactors PHP codebases: it automates upgrades from PHP 5.3 up to 8.5 plus framework migrations, and can keep code quality high continuously via CI.
Is it a framework I build on, or a tool I run against my existing code?A command-line developer tool, not a library: you install it as a dev dependency, describe the changes in a rector.php config at your project root, and run it over your codebase from the terminal.
How do I get it running on my project?Install it via Composer, create a rector.php defining your rules, then dry-run first — Rector prints a diff of the changes it would make. Drop --dry-run to apply them for real.
What do I need on my machine to run it?Just a PHP environment with Composer — it runs from the terminal on Linux, macOS and Windows, with no extra services or databases required.
Any gotchas before I let it rewrite my code?A few: output can lose formatting because the AST ignores whitespace (pair it with a standards tool like ECS), mixed PHP+HTML files need manual review, and on Windows run cmd or bash — parallel mode misbehaves under PowerShell 7.
Is Rector free to use, or is there a paid tier?The tool itself is free and developed in the open. The team makes money from optional commercial support for teams who would rather hire them to apply Rector than master abstract-syntax-tree complexity themselves.
Is there a ready-made rule set for my framework?Very likely — community maintainers keep dedicated sets for projects like Laravel, Drupal, CakePHP, TYPO3, Craft CMS, Shopware, Sylius, Sulu, Nette, Contao, Yii2 and SilverStripe.
How do I debug it when a rule does something unexpected?Run with --debug to print nested exceptions, add the --xdebug option if you use Xdebug, and use the built-in helpers that pretty-print AST nodes.
What are similar projects?ast-grep, PHP-Parser, infer, fallow, phpstan, rust-clippy, pyright, perch
Creator
rectorphp
Size
372.4 MB
Stars
10.4K
Age
9y
Commits · 90 Days