Instant Upgrades and Automated Refactoring of any PHP 5.3+ code
Go to file
Tomas Votruba 3b4fc37371 Updated Rector to commit 6459357ea31eddfda78fa9b843ff424646c3e260
6459357ea3 add some rules to define-constant e2e
2022-08-09 20:32:27 +00:00
.github Updated Rector to commit b536a67738 2022-06-14 06:49:40 +00:00
bin Updated Rector to commit 5ec4cff203f68d9578719b54ce3a145efb32bc79 2022-08-02 06:46:18 +00:00
config Updated Rector to commit a494d7c4f634553f490da4a689c06cfc903d6bb9 2022-08-04 14:29:17 +00:00
docs Updated Rector to commit ff1ba898a37496e467c64dc6428d0de8f097ef58 2022-07-31 00:37:06 +00:00
e2e Updated Rector to commit 6459357ea31eddfda78fa9b843ff424646c3e260 2022-08-09 20:32:27 +00:00
packages Updated Rector to commit b9cc90c058942d82f84a68f3d1971b2db6b1601d 2022-08-09 19:37:14 +00:00
rules Updated Rector to commit b9cc90c058942d82f84a68f3d1971b2db6b1601d 2022-08-09 19:37:14 +00:00
src Updated Rector to commit 6459357ea31eddfda78fa9b843ff424646c3e260 2022-08-09 20:32:27 +00:00
stubs-rector Updated Rector to commit 38ed8d2f6d 2022-05-27 15:54:40 +00:00
templates Updated Rector to commit 51e89c3f32 2022-04-12 08:58:57 +00:00
vendor Updated Rector to commit 6459357ea31eddfda78fa9b843ff424646c3e260 2022-08-09 20:32:27 +00:00
.gitattributes Updated Rector to commit e3f20c1fb6 2021-08-08 16:52:18 +00:00
CODE_OF_CONDUCT.md Use HTTPS instead of HTTP 2018-02-14 07:23:09 -02:00
CONTRIBUTING.md Updated Rector to commit 368dbb048c 2022-06-10 05:55:49 +00:00
LICENSE Update LICENSE year forever 2018-01-02 20:27:07 -02:00
README.md Updated Rector to commit cbe6271e16370118408bdea5fe6b8ea6eebe8f18 2022-08-07 14:40:46 +00:00
bootstrap.php Updated Rector to commit 87b3ad56dd 2022-06-29 11:52:41 +00:00
composer.json Updated Rector to commit f0425bc3cb3d5855da1bff9c38b872a9003e357b 2022-08-09 13:39:17 +00:00
preload.php Rector 0.13.5 2022-06-09 12:54:02 +00:00

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.1 and major open-source projects like Symfony, PHPUnit, Laravel, CakePHP 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 a First Book About Rector

Are you curious, how Rector works internally, how to create your own rules and test them and why Rector was born? In May 2021 we've released the very first book: Rector - The Power of Automated Refactoring.

By buying a book you directly support maintainers who are working on Rector.


Documentation

For Rule Developers and Contributors

See the full documentation.


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\Php74\Rector\Property\TypedPropertyRector;
use Rector\Set\ValueObject\SetList;
use Rector\Config\RectorConfig;

return static function (RectorConfig $rectorConfig): void {
    // here we can define, what sets of rules will be applied
    // tip: use "SetList" class to autocomplete sets
    $rectorConfig->sets([
        SetList::CODE_QUALITY
    ]);

    // register single rule
    $rectorConfig->rule(TypedPropertyRector::class);
};

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

Note: rector.php is loaded by default. For different location, use --config option.

Note: Rector will only update legacy code to utilize new features which are supported by the PHP version defined in your composer.json file. For instance, if require.php is >=7.2.5, Rector will not make changes which are only available for PHP versions after 7.2.5.


Configuration

// rector.php
use Rector\Core\ValueObject\PhpVersion;
use Rector\Config\RectorConfig;

return static function (RectorConfig $rectorConfig): void {
    // paths to refactor; solid alternative to CLI arguments
    $rectorConfig->paths([__DIR__ . '/src', __DIR__ . '/tests']);

    // is your PHP version different from the one you refactor to? [default: your PHP version], uses PHP_VERSION_ID format
    $rectorConfig->phpVersion(PhpVersion::PHP_72);

    // Path to PHPStan with extensions, that PHPStan in Rector uses to determine types
    $rectorConfig->phpstanConfig(__DIR__ . '/phpstan-for-config.neon');
};

Support

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.


Projects using Rector

  • codito/rector-money: set of rules related to moneyphp/money library. It can help you with upgrading to v4.0 or make your codebase compatible for future upgrade.

  • laminas/laminas-servicemanager-migration: set of rules related to laminas-servicemanager library. It can help migrate your code to laminas-servicemanager 4.x compatibility.


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

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

// dump nested node object with nested properties
dump_node($node);
// 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.