Instant Upgrades and Automated Refactoring of any PHP 5.3+ code
MIT License
6348
73
580

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

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:

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
    $rectorConfig->rule(TypedPropertyFromStrictConstructorRector::class);

    // here we can define, what sets of rules will be applied
    // tip: use "SetList" class to autocomplete sets with your IDE
    $rectorConfig->sets([
        SetList::CODE_QUALITY
    ]);
};

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

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

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.

Contributors

TomasVotruba
samsonasik
carusogabriel
kodiakhq[bot]
gnutix
JanMikes
jeroensmit
dobryy
staabm
mssimi
github-actions[bot]
leoloso
Aerendir
keulinho
simivar
markstory
lulco
ruudk
greg0ire
sashabeton
snapshotpl
shyim
stedekay
UFTimmy
sabbelasichon
scheb
ondrejmirtes
Lctrs
bendavies
derrickschoen
grogy
fsok
stloyd
azdanov
shaal
stephanvierkant
tomasnorre
SilverFire
C0pyR1ght
dealerplusadmin
u01jmg3
ddziaduch
clxmstaab
mpdude
zonuexe
phpfui
voku
pierredup
bitgandtter
addshore
mxr576
zingimmick
vladyslavstartsev
Jaapze
kevinreniers
ComiR
sbine
alfredbez
Great-Antique
Wirone
crishoj
peter279k
Bl00D4NGEL
EmanueleMinotto
guilliamxavier
o0h
holtkamp
HypeMC
jkuchar
JoyceBabu
paslandau
alterphp
soullivaneuh
ktomk
szepeviktor
dependabot[bot]
dereuromark
olivernybroe
andyexeter
atompulse
Philosoft
alexanderschnitzler
alister
MetalArend
dpesch
garas
fonata
HDVinnie
jaapio
jdreesen
j2L4e
JarJak
acrobat
escopecz
enumag
Kerrialn
sojki
matthiasnoback
tugmaks
Gymnasiast