# Rector - Upgrade your Legacy App to Modern Codebase Rector is a **rec**onstruc**tor** tool - it does **instant upgrades** and **instant refactoring** of your code. I mean, why do it manually if 80 % can Rector handle for you? [![Build Status](https://img.shields.io/travis/rectorphp/rector/master.svg?style=flat-square)](https://travis-ci.org/rectorphp/rector) [![Downloads](https://img.shields.io/packagist/dt/rector/rector.svg?style=flat-square)](https://packagist.org/packages/rector/rector) ![Rector-showcase](docs/images/rector-showcase.gif) Rector **instantly upgrades PHP & YAML code of your application**, with focus on open-source projects:

**Rector can**: - Rename classes, methods and properties - Rename partial namespace - Rename pseudo-namespace to namespace - Add, replace or remove arguments - Add arguments or return typehint - Change visibility of constant, property or method - And much more... ...just **look at overview of [all available Rectors](/docs/AllRectorsOverview.md)** with before/after diffs and configuration examples. It's all you really need to use build your own sets. ## Install ```bash composer require rector/rector:@dev --dev ``` **Do you have conflicts on `composer require`?** Install [prefixed version](https://github.com/rectorphp/rector-prefixed) with isolated dependencies. ### Extra Autoloading Rector relies on project and autoloading of its classes. To specify own autoload file, use `--autoload-file` option: ```bash vendor/bin/rector process ../project --autoload-file ../project/vendor/autoload.php ``` Or make use of `rector.yml` config: ```yaml # rector.yml parameters: autoload_paths: - '%kernel.project_dir%/vendor/squizlabs/php_codesniffer/autoload.php' - '%kernel.project_dir%/vendor/project-without-composer' ``` You can also **exclude files or directories** - use regex or [fnmatch](http://php.net/manual/en/function.fnmatch.php): ```yaml # rector.yml parameters: exclude_paths: - '*/src/*/Tests/*' ``` ## How to Reconstruct your Code ### A. Prepared Sets Featured open-source projects have **prepared sets**. You'll find them in [`/config/level`](/config/level). Do you need to upgrade to **Symfony 4.0**, for example? 1. Run rector on your `/src` directory: ```bash vendor/bin/rector process src --level symfony40 ``` Which is a shortcut for using complete path with `--config` option: ```bash vendor/bin/rector process src --config vendor/rector/rector/src/config/level/symfony/symfony40.yml ``` You can also use your **own config file**: ```bash vendor/bin/rector process src --config your-own-config.yml ``` 2. Do you want to see the preview of changes first? Use the `--dry-run` option: ```bash vendor/bin/rector process src --level symfony33 --dry-run ``` 3. To process just specific subdirectories, you can use [fnmatch](http://php.net/manual/en/function.fnmatch.php) pattern with `*`: ```bash vendor/bin/rector process "src/Symfony/Component/*/Tests" --level phpunit60 --dry-run ``` 4. What levels are on the board? ```bash vendor/bin/rector levels ``` ### B. Custom Sets 1. Create `rector.yml` with desired Rectors: ```yml services: Rector\Nette\Rector\Application\InjectPropertyRector: ~ ``` 2. Try Rector on your `/src` directory: ```bash vendor/bin/rector process src --dry-run ``` 3. Apply the changes if you like them: ```bash vendor/bin/rector process src ``` ## How to Apply Coding Standards? Rector uses [EasyCodingStandard](https://github.com/Symplify/EasyCodingStandard) to improve the code style of changed files, like import namespaces, make 1 empty line between class elements etc. It's always better to use own project's prepared set, but if you don't have the option yet, just use `--with-style` option to handle these basic cases: ```bash vendor/bin/rector process src --with-style ``` ## More Detailed Documentation - [How Rector Works?](/docs/HowItWorks.md) - [How to Create Own Rector](/docs/HowToCreateOwnRector.md) - [Service Name to Type Provider](/docs/ServiceNameToTypeProvider.md) ## How to Contribute Just follow 3 rules: - **1 feature per pull-request** - **New feature needs tests** - Tests, coding standards and PHPStan **checks must pass**: ```bash composer complete-check ``` Don you need to fix coding standards? Run: ```bash composer fix-cs ``` We would be happy to merge your feature then.