Releases: rectorphp/rector
Released Rector 0.10.16 fixing version and allowing older php-parser
New Features 🎉
- Added
@changelogannotation above rule to explain why the rule does what it does in the output #6073 - thanks @sabbelasichon
Just add it to your Rector rule:
/**
* @changelog https://wiki.php.net/rfc/typed_properties_v2#proposal
*/
final class TypedPropertyRector extends AbstractRector
{
}Run Rector:
vendor/bin/rector ...And if this rule changed the code, it will show the link too:
Applied Rectors:
* TypedPropertyRector - https://wiki.php.net/rfc/typed_properties_v2#proposal- NEW PACKAGE Rector Installer for easier extension installing - #6129 - thanks @sabbelasichon
- NEW PACKAGE Rector PHPStan Rules for rule developers - https://github.com/rectorphp/rector-phpstan-rules
- [DeadCode] Added
RemoveUnusedPrivateMethodParameterRector- #6168 - Refactored file processors to make use of
Fileobject (similar toScopeconcept from PHPStan) #6085 - Added
dump_node()helper function to see what node you have #6229 - thanks @ullique for inspiration
dump_node($string);
// change 2nd to increase depth
dump_node($string, 3);New Downgrade Rules
- Added
DowngradeStrictTypeDeclarationRector#6107 - thanks @samsonasik - Added
DowngradeArrayKeyFirstLastRector- #6137 - Added
DowngradeAnonymousClassRector- #6122 - thanks @samsonasik - Added
DowngradeNullCoalesceRector- #6208 - thanks @samsonasik
Bugfixes 🐛
- Fixed invalid doc block tag crashing #6068
- Fixed
parent,self,staticprefixing on class name change #6159 - Fixed use of
AbstractRectorTestCasein tests while usingrector/rector-prefixed- f801c76 - Fixed
AUTOLOAD_PATHSandBOOTSTRAP_FILESparameters in tests - #6239 - Fixed displayed Rector version in
rector/rector-prefixed26d6fff - Fixed code conflicts with different php-parser version in
rector/rector-prefixed- f15648e, thanks @phpstan for inspiration
Released Rector 0.10.4 with Static Annotation Parser
New Features 🎉
- #5974 Refactor doctrine/annotations to static reflection - annotation classes don't have to be autoloaded anymore
use Symfony\Component\Routing\Annotation\Route;
final class SomeController
{
/**
* @Route(path="/some_path", name="some_name")
*/
public function some()
{
}
}- #6045 make use of PHPDocNodeTraverser to work with docblock changes
Read more about these features:
- https://getrector.org/blog/from-doctrine-annotations-parser-to-static-reflection
- https://tomasvotruba.com/blog/how-to-traverse-phpdoc-and-modify-it/
Bugfixes 🐛
Released Rector 0.10 with Static Reflection and PHP 7.1 version
- See full diff: 0.9.0...0.10.0
Added Static Reflection 🚀🚀🚀
Do you have files with side effects or missing classes in autoload?
function hi()
{
echo 'hello';
}
hi();Static reflection finally refactors code without running it.
- Contributed in #5665
- Read more about how was Legacy Refactoring made Easy with Static Reflection
Do you still need to include files with constants or custom autoloader? Use BOOTSTRAP_FILES parameter:
$parameters->set(Option::BOOTSTRAP_FILES, [
__DIR__ . '/constants.php',
__DIR__ . '/project/special/autoload.php',
]);Prefixed Rector with min PHP 7.1 🐘
Previous version required at least PHP 7.3 to run or Docker. Both were an obstacle to run Rector out of the box on every project.
We changed that. Now you can run Rector with older PHP and conflicting dependencies with ease:
php --version
# PHP 7.1
composer require symfony/console:^2.8
composer require rector/rector-prefixed:^0.10- Contribted in #5880
Other Changes
- Inspired by PHPStan, you can run Rector without "process" command if you have configured paths in
rector.php:
vendor/bin/rector
13/260 [▓░░░░░░░░░░░░░░░░░░░░░░░░░░░] 5%-
Rules split into Project repositories: rector-symfony, rector-phpunit, rector-doctrine, rector-nette, rector-cakephp and rector-laravel
-
Rector testing simplified to single config-based - see #5837
-
Do you want to know more? Check the Release post
Upgrade Today
composer require rector/rector:^0.10
# or prefixed version
composer require rector/rector-prefixed:^0.10Released Rector 0.9
- See full diff: 0.8.56...0.9.0
New Features 🎉
- PHP 8 upgrade set
- Downgrade sets
- Debuggable scoped Rector
Do you want to know more? Check the Release post
0.8.46
Summary release for last 2 weeks, since 0.8.28
- See full diff: 0.8.28...0.8.46
New Features 🎉
- [#4490] [EarlyReturn] Brand new set
- [#4517] [Doctrine] Add a Doctrine DBAL 2.11 set, Thanks @chrisguitarguy
- [#4526] [CakePHP] Started ruleset for CakePHP 4.2, Thanks @markstory
- [#4468] [CodeQuality] Added
NewStaticToNewSelfRector - [#4442] [DoctrineCodeQuality] Added
ImproveDoctrineCollectionDocTypeInEntityRector - [#4471] [Restoratoin] Added
InferParamFromClassMethodReturnRector - [#4457] [CodeQualityString] Added
MoveOutMethodCallInsideIfConditionRector, Thanks @samsonasik - [#4489] [Performance] Add
CountArrayToEmptyArrayComparisonRector, Thanks @samsonasik - [#4515] [Nette] Add
RemoveParentAndNameFromComponentConstructorRector
Changes ⌚
AbstractFileSystemRectorwas dropped and replaced byFileNode, this was a crappy part of Rector, that split node-based refatoring and file-based; now the logic is simplified to essential code, and to workwith file, we can useFileNode- [#4510] [TypeDeclaration] We switched types from string
"int"fully to @phpstan typesnew IntegerType() - [#4513] Composer v2 was released, so we put it right into our GitHub Actions CI and cut install time to 50 %
Removed 🧹
- [#4451] [DynamicTypedAnalysis] Very narrow package with lack of practise didn't get any feedback. As unfinished and better suitable for tombstoning, this part was dropped to keep Rector's focus on automated refactoring
- [#4521] [Decouple] This had only 1 rule, it was hard to configure and use - the set was dropped, better use PHPStorm for local refactoring
They Write about Rector
- @freekmurze made practical 4-min video about upgrading to PHP 8
0.8.28
This is first release note list, so we included changes from the last month.
- See full diff: v0.8.7...0.8.28
New Features 🎉
Do you want to run Rector only on changed files?
# rector.php
use Rector\Core\Configuration\Option;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters();
$parameters->set(Option::ENABLE_CACHE, true);
};- [#4311] Add
initcommand, so you can createrector.phpconfig
vendor/bin/rector init
# "rector.php" created- [#4336] [Restoration] Add
RestoreFullyQualifiedNameRectorto restore accidentaly shortened class names
-public \SomeClass $someProperty;
+public \App\Full\SomeClass $someProperty;- [#4341] [Symfony] Add
AutoWireWithClassNameSuffixForMethodWithRequiredAnnotationRectorfor class method names with@requireannotation, Thanks @samsonasik
- [#4348] [PHP 8.0] Add @required annotation to #[Required] attribute from Symfony 5.2
- [#4350] [PHP 8.0] Add @route annotation to #[Route] attribute in Symfony 5.2
- [#4391] [SimplePhpDocParser] Decoupled first split package - https://github.com/rectorphp/simple-php-doc-parser, can be installed as
composer require rector/simple-php-doc-parser class SomeClass
{
public function canDrive(Car $car)
{
- if ($car->hasWheels && $car->hasFuel) {
- return true;
+ if (!$car->hasWheels) {
+ return false;
}
- return false;
+ if (!$car->hasFuel) {
+ return false;
+ }
+
+ return true;
}
}