All Projects → rectorphp → Rector

rectorphp / Rector

Licence: mit
Instant Upgrades and Automated Refactoring of any PHP 5.3+ code

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to Rector

Typo3 Rector
Rector for TYPO3
Stars: ✭ 107 (-97.74%)
Mutual labels:  hacktoberfest, ast, refactoring
rector-doctrine
Rector upgrades rules for Doctrine
Stars: ✭ 37 (-99.22%)
Mutual labels:  ast, rector, instant-upgrades
rector-nette
Rector upgrades rules for Nette
Stars: ✭ 16 (-99.66%)
Mutual labels:  ast, rector, instant-upgrades
rector-cakephp
Rector upgrades rules for CakePHP
Stars: ✭ 18 (-99.62%)
Mutual labels:  ast, rector, instant-upgrades
rector-laravel
Rector upgrades rules for Laravel
Stars: ✭ 75 (-98.42%)
Mutual labels:  ast, rector, instant-upgrades
Rewrite
Semantic code search and transformation
Stars: ✭ 134 (-97.17%)
Mutual labels:  ast, refactoring
Piranha
A tool for refactoring code related to feature flag APIs
Stars: ✭ 1,840 (-61.17%)
Mutual labels:  ast, refactoring
Awesome Graal
A curated list of awesome resources for Graal, GraalVM, Truffle and related topics
Stars: ✭ 302 (-93.63%)
Mutual labels:  hacktoberfest, ast
Sharpen
Visual Studio extension that intelligently introduces new C# features into your existing codebase
Stars: ✭ 351 (-92.59%)
Mutual labels:  hacktoberfest, refactoring
Yii2 Httpclient
Yii 2 HTTP client
Stars: ✭ 406 (-91.43%)
Mutual labels:  hacktoberfest
Fastest
Simple parallel testing execution... with some goodies for functional tests.
Stars: ✭ 407 (-91.41%)
Mutual labels:  hacktoberfest
Modal
A powerful and customizable modal implementation for Blazor applications.
Stars: ✭ 406 (-91.43%)
Mutual labels:  hacktoberfest
Hotreload
Xamarin.Forms XAML hot reload, live reload, live xaml
Stars: ✭ 407 (-91.41%)
Mutual labels:  hacktoberfest
Clusterlint
A best practices checker for Kubernetes clusters. 🤠
Stars: ✭ 409 (-91.37%)
Mutual labels:  hacktoberfest
Hacktoberfest
Hacktoberfest 2018. Check out the end video for this project ->
Stars: ✭ 406 (-91.43%)
Mutual labels:  hacktoberfest
Mathdown
Collaborative markdown with math
Stars: ✭ 410 (-91.35%)
Mutual labels:  hacktoberfest
Gazebo
Open source robotics simulator.
Stars: ✭ 404 (-91.47%)
Mutual labels:  hacktoberfest
Udash Core
Scala framework for building beautiful and maintainable web applications.
Stars: ✭ 405 (-91.45%)
Mutual labels:  hacktoberfest
Efqrcode
A better way to operate QR Code in Swift, support iOS, macOS, watchOS and tvOS.
Stars: ✭ 4,121 (-13.04%)
Mutual labels:  hacktoberfest
Yatopia
The Most Powerful and Feature Rich Minecraft Server Software!
Stars: ✭ 408 (-91.39%)
Mutual labels:  hacktoberfest

Rector - Instant Upgrades and Automated Refactoring

Downloads


Rector instantly upgrades and refactors the PHP code of your application. It can help you 2 major areas:

1. Instant Upgrades

Rector now supports upgrades from PHP 5.3 to 8.0 and major open-source projects like Symfony, PHPUnit, Nette, Laravel, CakePHP, Doctrine, PHPOffice and TYPO3 out of the box. Do you want to be constantly on the latest PHP/framework version 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 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


Install

composer require rector/rector --dev

Running Rector

There a 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:

// rector.php
use Rector\Php74\Rector\Property\TypedPropertyRector;
use Rector\Set\ValueObject\SetList;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

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

    // register single rule
    $services = $containerConfigurator->services();
    $services->set(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\Configuration\Option;
use Rector\Core\ValueObject\PhpVersion;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (ContainerConfigurator $containerConfigurator): void {
    $parameters = $containerConfigurator->parameters();

    // paths to refactor; solid alternative to CLI arguments
    $parameters->set(Option::PATHS, [__DIR__ . '/src', __DIR__ . '/tests']);

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

    // Path to phpstan with extensions, that PHPSTan in Rector uses to determine types
    $parameters->set(Option::PHPSTAN_FOR_RECTOR_PATH, getcwd() . '/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.


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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].