Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rectorphp/rector
Instant Upgrades and Automated Refactoring of any PHP 5.3+ code
https://github.com/rectorphp/rector
ast automated-upgrades instant-upgrades php rector upgrade
Last synced: 3 days ago
JSON representation
Instant Upgrades and Automated Refactoring of any PHP 5.3+ code
- Host: GitHub
- URL: https://github.com/rectorphp/rector
- Owner: rectorphp
- License: mit
- Created: 2017-07-15T11:16:02.000Z (over 7 years ago)
- Default Branch: main
- Last Pushed: 2024-10-28T21:07:25.000Z (about 1 month ago)
- Last Synced: 2024-10-29T21:59:20.881Z (about 1 month ago)
- Topics: ast, automated-upgrades, instant-upgrades, php, rector, upgrade
- Language: PHP
- Homepage: https://getrector.com
- Size: 346 MB
- Stars: 8,706
- Watchers: 88
- Forks: 686
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-php - Rector - A tool to upgrade and refactor code. (Table of Contents / Code Analysis)
- awesome-php-cn - Rector - 升级工具和重构代码. (目录 / 代码分析 Code Analysis)
- awesome-projects - Rector - A tool to upgrade and refactor code. (PHP / Code Analysis)
- awesome-php - Rector - A tool to upgrade and refactor code. (Table of Contents / Code Analysis)
README
# Rector - Instant Upgrades and Automated Refactoring
[![Downloads](https://img.shields.io/packagist/dt/rector/rector.svg?style=flat-square)](https://packagist.org/packages/rector/rector)
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](https://github.com/rectorphp/rector-symfony), [PHPUnit](https://github.com/rectorphp/rector-phpunit), and [Doctrine](https://github.com/rectorphp/rector-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](https://getrector.com/blog/new-setup-ci-command-to-let-rector-work-for-you) to see how to set up automated refactoring.
## Install
```bash
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:
```bash
vendor/bin/rector
```And modify it:
```php
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:
```bash
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`:
```bash
vendor/bin/rector process src
```## Documentation
* Find [full documentation here](https://getrector.com/documentation/).
* [Explore Rector Rules](https://getrector.com/find-rule)
## 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](https://leanpub.com/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:
* [palantirnet/drupal-rector](https://github.com/palantirnet/drupal-rector)
* [craftcms/rector](https://github.com/craftcms/rector)
* [FriendsOfShopware/shopware-rector](https://github.com/FriendsOfShopware/shopware-rector)
* [sabbelasichon/typo3-rector](https://github.com/sabbelasichon/typo3-rector)
* [sulu/sulu-rector](https://github.com/sulu/sulu-rector)
* [efabrica-team/rector-nette](https://github.com/efabrica-team/rector-nette)
* [Sylius/SyliusRector](https://github.com/Sylius/SyliusRector)
* [CoditoNet/rector-money](https://github.com/CoditoNet/rector-money)
* [laminas/laminas-servicemanager-migration](https://github.com/laminas/laminas-servicemanager-migration)
* [cakephp/upgrade](https://github.com/cakephp/upgrade)
* [driftingly/rector-laravel](https://github.com/driftingly/rector-laravel)
* [contao/contao-rector](https://github.com/contao/contao-rector)
* [php-static-analysis/rector-rule](https://github.com/php-static-analysis/rector-rule)
## Hire us to get Job Done :muscle:
Rector is a tool that [we develop](https://getrector.com/) 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](https://getrector.com/contact) to get there faster.
## How to Contribute
See [the contribution guide](/CONTRIBUTING.md) or go to development repository [rector/rector-src](https://github.com/rectorphp/rector-src).
## Debugging
You can use `--debug` option, that will print nested exceptions output:
```bash
vendor/bin/rector process src/Controller --dry-run --debug
```Or with Xdebug:
1. Make sure [Xdebug](https://xdebug.org/) is installed and configured
2. Add `--xdebug` option when running Rector```bash
vendor/bin/rector process src/Controller --dry-run --xdebug
```To assist with simple debugging Rector provides 2 helpers to pretty-print AST-nodes:
```php
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](https://github.com/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](https://getrector.com/documentation/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](https://github.com/symplify/easy-coding-standard) with [this setup](https://github.com/rectorphp/rector-src/blob/main/ecs.php).
### 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.