Instant Upgrades and Automated Refactoring of any PHP 5.3+ code
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Tomas Votruba 4e35c1eafd Updated Rector to commit 2d174631c410c5ec1767a28905206e2e678b546b
2d174631c4 [CodeQuality] Handle return new object and no return on ConsecutiveNullCompareReturnsToNullCoalesceQueueRector (#4112)
8 hours ago
.github Updated Rector to commit b536a67738 12 months ago
bin Updated Rector to commit bdc2fc99631f67eeb2d96e2cf0906279c2561c9a 1 week ago
config Updated Rector to commit be31c8faec553f9247f3c0d810648ec22b91b827 3 days ago
docs Updated Rector to commit 2dccbb6b176a836e174babbaf6611a0d4730c55c 3 days ago
e2e Updated Rector to commit 7f1f57acc358e4c7724b146f3a9d976bae4cb0c9 4 months ago
packages Updated Rector to commit 7f73d653b9ceb059f9d05e010a7c6120f23c77ac 16 hours ago
rules Updated Rector to commit 2d174631c410c5ec1767a28905206e2e678b546b 8 hours ago
src Updated Rector to commit 2d174631c410c5ec1767a28905206e2e678b546b 8 hours ago
stubs-rector Updated Rector to commit 38ed8d2f6d 1 year ago
templates Updated Rector to commit f56a0532c244b1585c66d3f1448e9be9f6833b41 3 months ago
vendor Updated Rector to commit 2d174631c410c5ec1767a28905206e2e678b546b 8 hours ago
.gitattributes Updated Rector to commit e3f20c1fb6 2 years ago Use HTTPS instead of HTTP 5 years ago Updated Rector to commit 29a450266e9b34d7cc2e31e96390f52abcebc76e 2 months ago
LICENSE Update LICENSE year forever 6 years ago Updated Rector to commit 5c1be93b80c3f7bfd8bd158ba0a55501a7acaefc 1 month ago
bootstrap.php Updated Rector to commit dc22a952fe92e3574a27c8e9e7de3d9aead42a4f 9 months ago
composer.json Updated Rector to commit 645071a650fc50d7e084378facaebcc868a52ba1 4 weeks ago
preload.php Updated Rector to commit 7030f1fb0e98329b48fc436189acd4509393b6e5 5 days ago

Rector - Instant Upgrades and Automated Refactoring


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.2 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.


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:

vendor/bin/rector init

And modify it:

use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\SetList;
use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictConstructorRector;

return static function (RectorConfig $rectorConfig): void {
    // register single rule

    // here we can define, what sets of rules will be applied
    // tip: use "SetList" class to autocomplete sets with your IDE

Then dry run Rector:

vendor/bin/rector process src --dry-run

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

vendor/bin/rector process src


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.


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

vendor/bin/rector process 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 process 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

// dump nested node object with nested properties

// 2nd argument is how deep the nesting is - this makes sure the dump is short and useful
dump_node($node, 1);

Known Drawbacks

How to Apply Coding Standards?

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. That's why 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.