• Stars
    star
    8,596
  • Rank 4,263 (Top 0.09 %)
  • Language
    PHP
  • License
    MIT License
  • Created over 7 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Instant Upgrades and Automated Refactoring of any PHP 5.3+ code

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

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

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

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 File(s) thas has mixed PHP+HTML content, you may need to manually verify the changed file after apply the changes.

More Repositories

1

rector-symfony

Rector upgrade rules for Symfony
PHP
179
star
2

rector-src

Development repository for Rector
PHP
97
star
3

swiss-knife

Swiss knife in pocket of every upgrade architect!
PHP
85
star
4

type-perfect

Next level type declaration check PHPStan rules
PHP
73
star
5

rector-phpunit

Rector upgrade rules for PHPUnit
PHP
62
star
6

rector-doctrine

Rector upgrade rules for Doctrine
PHP
57
star
7

rector-downgrade-php

Rector downgrade rules for PHP
PHP
35
star
8

php-parser-nodes-docs

Visual documentation of PHP Parser nodes, to help you learn AST, how to create nodes and analyse them
PHP
31
star
9

getrector-com

Rector Website
PHP
25
star
10

rector-book-feedback

[BOOK] Repository for feedback from readers of Rector book, to improve it continuously
15
star
11

extension-installer

Composer Plugin for simpler registration of Rector extension configs
PHP
15
star
12

phpstan-rules

PHPStan Rules for Rector Rules developers
PHP
15
star
13

rector-pest

PHP
10
star
14

rector-phpoffice

[DISCONTUINED] Rector upgrades rules for PHP Office
PHP
8
star
15

rector-book-code-examples

Code examples from the Rector book up-to-date with Rector 1.0
PHP
8
star
16

rector-php56

[SPONSORWARE] Rector running natively on PHP 5.6 for the real legacy project
PHP
3
star
17

reusable-workflows

Re-usable workfows for Rector repositories
3
star
18

vendor-patches

Vendor patches for Rector packages
1
star
19

rector-debugging

[DEPRECATED] Rector debugging functions for dump and printing nodes
PHP
1
star
20

rector-php-parser

PHP
1
star
21

custom-phpspec-to-phpunit

From PHPSpec and Prophecy to PHPUnit - use at own risk
PHP
1
star
22

release-notes-generator

The way we generate release notes for Rector repository
PHP
1
star