Skip to content

Releases: rectorphp/rector

Released Rector 2.2

06 Oct 14:02

Choose a tag to compare

This release includes dozens of fixes, new PHP and Type Declaration rules, many Symfony Console rules improvements...

...and one brand new set: type coverage docblocks 🎉 🎉 🎉

Read the gist on our blog - Rector 2.2: New rules for Array Docblocks


New Features and Improvements 🚀

New rules for Type Coverage Docblocks:

  • Add AddReturnDocblockForCommonObjectDenominatorRector (#7249)
  • Add AddParamArrayDocblockFromDimFetchAccessRector (#7253)
  • Add AddParamArrayDocblockFromDataProviderRector (#7257)
  • Add ClassMethodArrayDocblockParamFromLocalCallsRector (#7259)
  • Add AddReturnDocblockDataProviderRector (#7266)
  • Add fixture for data provider return options (#7268)
  • Add AddReturnDocblockForArrayDimAssignedObjectRector (#7302)
  • Add DocblockVarArrayFromPropertyDefaultsRector (#7311)
  • Add DocblockVarArrayFromGetterReturnRector (#7313)
  • Add AddReturnDocblockForJsonArrayRector (#7320)
  • Add AddParamArrayDocblockFromAssignsParamToParamReferenceRector (#7323)
  • [dx] add withTypeCoverageDocblockLevel() (#7363)

  • [dead-code] Add RemoveUnusedVariableUseRector (#7430)
  • [Php 8.5] Add WakeupToUnserializeRector (#7242), Thanks @arshidkv12!
  • [code-quality] Add RepeatedOrEqualToInArrayRector (#7400)
  • [Php 8.1] Add NullToStrictIntPregSlitFuncCallLimitArgRector (#7240)
  • feat: add greater and smaller support to StrlenZeroToIdenticalEmptyStringRector (#7329), Thanks @calebdw!
  • [TypeDeclaration] Allow empty array to native array on AddMethodCallBasedStrictParamTypeRector (#7342)
  • [TypeDeclaration] Allow named arg on AddArrayFunctionClosureParamTypeRector (#7397)
  • [type-declarations] Add KnownMagicClassMethodTypeRector (#7419)
  • Add rector to migrate __sleep() to __serialize() (#7212), Thanks @arshidkv12!
  • [type-declaration] Add AddParamFromDimFetchKeyUseRector (#7424)
  • Add first class callable support to CallUserFuncArrayToVariadicRector (#7428)

Bugfixes 🐛

  • fix: remove empty construct when parent has no construct (#7239), Thanks @calebdw!
  • fix: overly strict ArraySpreadInsteadOfArrayMergeRector (#7247), Thanks @calebdw!
  • [CodingStyle] Skip non-native array type on PHP 7.4 for ArraySpreadInsteadOfArrayMergeRector (#7248)
  • fix: FunctionLikeToFirstClassCallableRector (#7265), Thanks @calebdw!
  • fix: EnumCaseToPascalCaseRector skips existing pascal case (#7264), Thanks @calebdw!
  • [CodeQuality] Skip init not empty array on InlineArrayReturnAssignRector (#7276)
  • fix: EnumCaseToPascalCaseRector bugs (#7278), Thanks @calebdw!
  • Avoid complex nesting in ConstantArrayTypeGeneralizer (#7282)
  • [TypeDeclaration] Fix return by variable anonymous on ReturnTypeFromReturnNewRector (#7292)
  • [Php84] Allow early return on ForeachToArrayAllRector (#7316), Thanks @Orest-Divintari!
  • [TypeDeclaration] Fix configurable on IncreaseDeclareStrictTypesRector to show on getrector.com (#7327)
  • Skip nested array dim fetch assigns in InlineArrayReturnAssignRector (#7380)
  • [CodeQuality] Fix escape character on SimplifyRegexPatternRector (#7390)
  • Try use double quote on SimplifyRegexPatternRector (#7392)
  • [type-declarations] Open isset check in StrictArrayParamDimFetchRectorTest, move to last position in type-declaration level (#7388)
  • [CodeQuality] allow coalesce not on full variable, but dim fetch in StrictArrayParamDimFetchRector (#7404)
  • [CodeQuality] Skip bool equal integer on UseIdenticalOverEqualWithSameTypeRector (#7411)
  • update comment on fixtures (#7413)
  • [CodeQuality] Use ->isBoolean() check on compare boolean and constant bool on UseIdenticalOverEqualWithSameTypeRector (#7415)

Removed 💀

  • [Differ] Remove ConsoleDiffer, use DefaultDiffer that utilize ColorConsoleDiffFormatter instead to avoid double diffing process (#7309)

Rector Symfony 🎵

  • [Symfony61] Handle already exists attributes name on CommandConfigureToAttributeRector (#849)
  • [Symfony 6.2] Move symfony/security-core to security-http and security-bundle as target class/contant exists there (#848)
  • [Symfony73] Remove extends AbstractExtension after apply change on GetFunctionsToAsTwigFunctionAttributeRector (#846)
  • [code-quality] keep attribute in InlineClassRoutePrefixRector if it contains other metadata (#845)
  • [console] [7.3] Add implicit boolean type in InputOption::VALUE_NONE option (#844)
  • [console] [7.3] Add type declaration based on default value type in InvokableCommandInputAttributeRector (#843)
  • [console] [7.3] add array argument support to /InvokableCommandInputAttributeRector (#842)
  • [console] [7.3] Add support for default values in InvokableCommandInputAttributeRector (#841)
  • [console] [7.3] Add const names in InvokableCommandInputAttributeRector + fix -_ naming to camel case (#840)
  • [console] [7.3] Fix missing options in InvokableCommandInputAttributeRector (#839)
  • [console] [7.3] Replace input/output with symfony style if used in InvokableCommandInputAttributeRector (#838)

Rector Doctrine 🟠

  • [dbal] [4.0] remove constant rename, as will be turned into enum right away and required manaul upgrade (#467)
  • Fix PHPStan notice on PHPStan 2.1.23 (#466)

Rector PHPUnit 🟢

  • [CodeQuality] Ensure verify ClassReflection->hasConstructor() on MethodParametersAndReturnTypesResolver (#550)
  • [CodeQuality] Skip not match position named argument part 2 (#548)
  • [code-quality] add New_ support to ScalarArgumentToExpectedParamTypeRector (#547)
  • [phpunit] [9.0] resolve WithConsecutiveRector naming ad-hoc to PHPUnit real code (#546)

Released Rector 2.1.7

10 Sep 11:15

Choose a tag to compare

New Features 🥳


Bugfixes 🐛

  • fix: skip privatizing Laravel Model attributes and scopes (#7218), Thanks @calebdw!
  • [CodeQuality] Change behaviour of OptionalParametersAfterRequiredRector to fill null default value when previous param is optional (#7222)
  • [CodeQuality] Handle intersection on OptionalParametersAfterRequiredRector (#7223)
  • [CodeQuality] Fill reasonable default value on OptionalParametersAfterRequiredRector (#7226)
  • Support Param nodes in makeNonFinal() (#7228), Thanks @arshidkv12!
  • [CodeQuality] Add Closure support on OptionalParametersAfterRequiredRector (#7224)



rectorphp/rector-symfony 🎵

  • [console] [7.3] add array argument support to /InvokableCommandInputAttributeRector (#842)
  • [console] [7.3] Add support for default values in InvokableCommandInputAttributeRector (#841)
  • [console] [7.3] Add const names in InvokableCommandInputAttributeRector + fix -_ naming to camel case (#840)
  • [console] [7.3] Fix missing options in InvokableCommandInputAttributeRector (#839)
  • [console] [7.3] Replace input/output with symfony style if used in InvokableCommandInputAttributeRector (#838)

rectorphp/rector-doctrine 🟠

  • add target document support to CompletePropertyDocblockFromToManyRector (#465)
  • add support for multiple items (#464)
  • [typed-collections] Add CollectionDocblockGenericTypeRector (#463)
  • fix document service repository class (#462)
  • [code-quality] add document repository support to AddAnnotationToRepositoryRector (#461)

rectorphp/rector-phpunit 🟢

  • [code-quality] add local call support to ScalarArgumentToExpectedParamTypeRector (#543)
  • cover scalar argument in behat as well (#542)
  • [CodeQuality] Skip not match position named argument on ScalarArgumentToExpectedParamTypeRector (#540)
  • add float support to scalar argument rule (#539)
  • Add nullable support to ScalarArgumentToExpectedParamTypeRector (#538)
  • [CodeQuality] Handle crash on no @Depends on AddParamTypeFromDependsRector (#537)

Released Rector 2.1.6

05 Sep 15:45

Choose a tag to compare

rectorphp/rector-phpunit

  • [code-quality] add with() + callback() support to TypeWillReturnCallableArrowFunctionRector (#535)
  • [CodeQuality] Handle crash on no @ depends on AddParamTypeFromDependsRector (#537)

Released Rector 2.1.5

04 Sep 14:26

Choose a tag to compare

New Features 🥳

  • feat: add NarrowTooWideReturnTypeRector (#7150), Thanks @calebdw!
  • [Php85] Add ColonAfterSwitchCaseRector (#7157)
  • feat: add StaticToSelfStaticPropertyFetchOnFinalClassRector (#7161), Thanks @calebdw!
  • feat: Add AddReturnDocblockForScalarArrayFromAssignsRector (#7151), Thanks @imliam!
  • [TypeDeclaration] Register AddReturnDocblockForScalarArrayFromAssignsRector to type declaration set (#7166)
  • Refactor RemoveDuplicatedCaseInSwitchRector and adding test cases (#7175), Thanks @max-s-lab!
  • [Php85] Add ArrayKeyExistsNullToEmptyStringRector (#7183), Thanks @arshidkv12!
  • [Php85] Add fixture to skip integer key on ArrayKeyExistsNullToEmptyStringRector (#7189)
  • [Php85] Add ChrArgModuloRector (#7190), Thanks @arshidkv12!
  • [assert] Kick of experimental rule, AddAssertArrayFromClassMethodDocblockRector (#7206)
  • [php 8.3] Add json_validate rule. (#7213), Thanks @arshidkv12!
  • Add MbStrContainsRector (#7199), Thanks @arshidkv12!
  • [PHP 8.5] Rename constant FILTER_DEFAULT to FILTER_UNSAFE_RAW (#7209), Thanks @ddevsr!
  • [PHP 8.5] Convert @deprecated to #[\Deprecated] on constants (#7155), Thanks @DanielEScherzer!

Bugfixes 🐛

  • [TypeDeclaration] Skip integer index on string on AddArrowFunctionParamArrayWhereDimFetchRector (#7178)
  • [TypeDeclaration] Skip Valid type from return doc and typed param on AddMethodCallBasedStrictParamTypeRector (#7172)
  • [Renaming] Keep parentheses on RenameCastRector (#7153)
  • [CodeQuality] Skip next inside array_filter() on SimplifyEmptyArrayCheckRector (#7154)
  • Clean up ternary on ColonAfterSwitchCaseRector (#7158)
  • fix: convert static::* to self::* for all constant access in final classes (#7159), Thanks @calebdw!
  • fix: static to self static method call on final class (#7160), Thanks @calebdw!
  • fix multi-line error message format (#7164), Thanks @FeBe95!
  • [CodeQuality] Skip @Final doc with public property on ConvertStaticToSelfRector (#7168)
  • [CodeQuality] Skip @Final doc with public class constant on ConvertStaticToSelfRector (#7170)
  • Ensure native ReflectionClassConstant->isFinal() exists by check real php version (#7171)
  • Fix RemoveDuplicatedCaseInSwitchRector behavior (#7173), Thanks @max-s-lab!
  • replace PHP_EOL with \n when used with symfony console (#7174), Thanks @FeBe95!
  • [CodeQuality] Handle parentheses inner if with assign on CombineIfRector (#7179)
  • [DeadCode] Fix merge comments on RemoveAlwaysTrueIfConditionRector (#7181)
  • [Naming] Skip rename override method from /vendor/ on RenameParamToMatchTypeRector (#7182)
  • [Php84] Handle named key argument with flipped position on ArrayKeyExistsNullToEmptyStringRector (#7186)
  • skip constructor param hook on ReadOnlyPropertyRector (#7192), Thanks @tandev!
  • [Php84] Skip value extraction on ForeachToArray* rules (#7193)
  • [Scope] Handle Scope refreshing on Attribute on print string with NOWDOC (#7194)
  • [Transform] Fix example config on FuncCallToNewRector (#7196)
  • [Composer] Make InstalledPackageResolver::resolvedInstalledPackages nullable to verify cached package lists (#7210)
  • [AutoImport] Do not rename different namespaced function on auto import + RenameFunctionRector (#7214)
  • Rectify (#7216)
  • [DeadCode] Skip non-public __clone() method on RemoveEmptyClassMethodRector (#7187)

Removed and reprecated 💀

  • Throw Deprecatation on StaticToSelfStaticMethodCallOnFinalClassRector and ConvertStaticPrivateConstantToSelfRector (#7165)
  • [Php85] Remove calls to deprecated no-op functions (#7128), Thanks @mttsch!
  • [8.4][DeprecatedAnnotationToDeprecatedAttributeRector] Remove invalid example (#7202), Thanks @DanielEScherzer!
  • Remove removed "Rector\Symfony\Set\FOSRestSetList/JMSSetList/SensiolabsSetList" usage (#7204)



rectorphp/rector-symfony 🎵

  • restore SymfonyInternalSetList to allow relative paths to sets, use internally only (#837)
  • [code-quality] add filter_var() support to ParameterBagTypedGetMethodCallRector (#836)
  • [CodeQuality] Skip first class callable on ParameterBagTypedGetMethodCallRector (#835)
  • [code-quality] Add ParameterBagTypedGetMethodCallRector (#834)
  • [config] add symfony cache pool support to StringExtensionToConfigBuilderRector (#832)
  • [doctrine] add mapping type support to StringExtensionToConfigBuilderRector (#831)
  • [config] Add query/result cache doctrine support in StringExtensionToConfigBuilderRector (#830)
  • [config] Add monolog and dbal fixes to StringExtensionToConfigBuilderRector (#829)
  • [SYMFONY 7.4] replace function call routing (#828), Thanks @JohJohan

rectorphp/rector-phpunit 🟢

  • [code-quality] Add ScalarArgumentToExpectedParamTypeRector (#533)
  • [CodeQuality] Fix assertGreater/Less apply on AssertComparisonToSpecificMethodRector (#532)
  • [CodeQuality] Skip docblock based type on AddReturnTypeToDependedRector (#530)
  • Remove unused check return with expr as already covered on ReturnAnalyzer (#529)
  • [code-quality] Add AddReturnTypeToDependedRector (#528)
  • [code-quality] Add AddParamTypeFromDependsRector (#525)
  • Fix target method on dataProvider on DataProviderAnnotationToAttributeRector (#524)
  • [AnnotationToAttribute] Handle already in use on DataProviderAnnotationToAttributeRector (#523)
  • [CodeQuality] Skip already has return type on TypeWillReturnCallableArrowFunctionRector (#518)
  • Drop MatchAssertEqualsExpectedTypeRector (#517)
  • [CodeQuality] Handle crash on native "object" type on TypeWillReturnCallableArrowFunctionRector (#516)
  • [CodeQuality] Skip return createMock() on TypeWillReturnCallableArrowFunctionRector (#515)
  • [CodeQuality] Rename MatchAssertSameExpectedTypeRector to MatchAssertEqualsExpectedTypeRector to only apply on assertEquals (#514)
  • [code-quality] Add MatchAssertSameExpectedTypeRector (#510)
  • add GetMockBuilderGetMockToCreateMockRector to code quality set (#509)

rectorphp/rector-downgrade-php

  • [DowngradePhp83] Add DowngradeJsonValidateRector (#313)
  • [DowngradePhp81] Handle parent is void on DowngradeNeverTypeDeclarationRector (#311)
  • [DowngradePhp81] Skip check version_compare with if on DowngradeHashAlgorithmXxHashRect...
Read more

Released Rector 2.1.4

15 Aug 14:44

Choose a tag to compare

Bugfixes 🐛

  • [Php85] Rename deprecated casts (#7138), Thanks @mttsch!
  • [Console] Fix symfony/console diff broken on windows on symfony/console 6.4.24 (#7148)
  • Use active voice and improve rule definitions (#7146), Thanks @simonschaufi!

Released: Rector 2.1.3

13 Aug 12:04

Choose a tag to compare

New Features 🥳

  • Add ClosureFromCallableToFirstClassCallableRector rule (#7071), Thanks @devnix!
  • [Php81] added RemoveReflectionSetAccessibleCallsRector (#7085), Thanks @NickSdot!
  • [type-declaration] Add AddReturnTypeFromTryCatchTypeRector (#7099)
  • Add check phpstan if phpstan is running on preload.php (#7040)
  • [type-coverage] Add support for same returned object in ReturnTypeFromReturnNewRector (#7096)
  • feat: add support for set, isset, and unset operations in ArrayDimFetchToMethodCallRector (#7095), Thanks @calebdw!
  • [TypeDeclaration] Skip try catch finally different type on AddReturnTypeFromTryCatchTypeRector (#7101)
  • [type-declaration] Add AddArrayFilterClosureParamTypeRector (#7111)
  • [type-coverage] Improve AddArrowFunctionParamArrayWhereDimFetchRector to handle multiple functions (#7112)
  • add list<...> support to AddArrayFunctionClosureParamTypeRector (#7116)
  • feat: add RemoveReadonlyPropertyVisibilityOnReadonlyClassRector (#7115), Thanks @calebdw!
  • feat: add laravel to RectorConfigBuilder::withComposerBased (#7110), Thanks @calebdw!
  • [Renaming] Add RenameCastRector (#7117), Thanks @mttsch!
  • [type-declarations] Add TypedPropertyFromDocblockSetUpDefinedRector (#7135)

PHP 8.5 🚀

  • [Php85] Add missing url about openssl_pkey_derive arg deprecation (#7141), Thanks @mttsch!
  • [Php85] Remove deprecated arg from openssl_pkey_derive calls (#7127), Thanks @mttsch!
  • [Php85] Remove arg from get_defined_functions calls (#7126), Thanks @mttsch!
  • [Php85] Remove context arg from finfo_buffer calls (#7129), Thanks @mttsch!
  • [Php85] Rename socket_set_timeout function calls (#7121), Thanks @mttsch!
  • [Php85] Rename mysqli_execute function calls (#7122), Thanks @mttsch!
  • [Php85] Rename deprecated SplObjectStorage methods (#7123), Thanks @mttsch!
  • [Php85] Rename deprecated PDO constants and methods (#7125), Thanks @mttsch!
  • [Php85] Replace null return with empty array in __debugInfo (#7124), Thanks @mttsch!

Bugfixes 🐛

  • [TypeDeclaration] Handle crash on direct callable without params on AddArrayFunctionClosureParamTypeRector (#7131)
  • [TypeDeclaration] Skip ArrayAccess as array item type on AddArrowFunctionParamArrayWhereDimFetchRector (#7113)
  • [Renaming] Allow rename attribute on Param on RenameAttributeRector (#7072)
  • [CodeQuality] Mirror comment on InlineConstructorDefaultToPropertyRector (#7074)
  • [CodeQuality] Move logic directly for merge comments on InlineConstructorDefaultToPropertyRector (#7075)
  • [CodingStyle] Fix variable in the middle on WrapEncapsedVariableInCurlyBracesRector (#7076)
  • [CodeQuality] Skip Never type by @return docblock on ExplicitReturnNullRector (#7078)
  • [Naming] Skip var used after switch on RenameForeachValueVariableToMatchExprVariableRector (#7080)
  • [Naming] Use ScopeFetcher::fetch() near its usage on RenameForeachValueVariableToMatchExprVariableRector (#7081)
  • [AutoImport] Handle auto import short name on global namespace (#7086)
  • [TypeDeclaration] Skip ArrayAccess on StrictArrayParamDimFetchRector (#7087)
  • [Php81] Handle on ternary on NullToStrictStringFuncCallArgRector (#7091)
  • fix: sorting of named parameters in variadic functions (#7090), Thanks @calebdw!
  • fix: skip AssignOps in ArrayDimFetchToMethodCallRector (#7100), Thanks @calebdw!
  • Skip PhpdocTypesFixer of PhpCsFixer on Scalar node (#7103)
  • fix: skip variable assignments in get_defined_vars (#7106), Thanks @calebdw!
  • [Php80] Skip not match property hook type with parameter type on ClassPropertyAssignToConstructorPromotionRector (#7109)
  • [DeadCode] Early check GenericTypeNode is not dead code on DeadVar/ReturnParam Analyzer (#7118)
  • [Config] Allow php85: true on withPhpSets() (#7130)
  • [Php84] Allow on return on ForeachToArrayAnyRector (#7119), Thanks @Orest-Divintari!
  • [TypeDeclaration] Keep Generic type docblock on TypedPropertyFromDocblockSetUpDefinedRector (#7140)
  • fix: allow more nodes to be passed to AttributeGroupNewLiner (#7145), Thanks @calebdw!
  • [DeadCode] Skip used in compact() on RemoveUnusedForeachKeyRector (#7073)
  • [DeadCode] Handle assign on Arg on RemoveUnusedPrivatePropertyRector (#7092)
  • [DeadCode] Skip Templated type on param and return on RemoveUselessParamTagRector and RemoveUselessReturnTagRector under IntersectionType (#7093)
  • [DeadCode] Skip mixed fallback null on trait on RemoveAlwaysTrueIfConditionRector (#7098)
  • [DeadCode] Skip with first class callable on RemoveUnusedPrivateMethodParameterRector (#7104)
  • [DeadCode] Skip with get_defined_vars() on RemoveUnusedPrivateMethodParameterRector ([#7105](rectorphp/rector-src#7105


rectorphp/rector-symfony 🎵

  • [CodeQuality] Skip got duplicated method after suffix removed on ActionSuffixRemoverRector (#827)
  • Keep AsCommand in InvokableCommandInputAttributeRector documentation (#824), Thanks @bobvandevijver



rectorphp/rector-doctrine 🟠

  • [CodeQuality] Keep param/return doc with description on TypeNullableEntityFromDocblockRector (#460)
  • [code-quality] Add TypeNullableEntityFromDocblockRector to add safe types to doctrine entities (#459)



rectorphp/rector-phpunit 🟢

  • Cover array shape iterator for YieldDataProviderRector+RemoveUselessReturnTagRector. (#505), Thanks @biozshock

Released Rector 2.1.2

17 Jul 19:37

Choose a tag to compare

Bugfixes 🐛

  • [Php82] Handle array dim fetch variable on VariableInStringInterpolationFixerRector (#7060)
  • [Php82] Ensure ArrayDimFetch var is Variable to transform {$ on VariableInStringInterpolationFixerRector (#7061)
  • Update LNumber and DNumber to Int_ and Float_ (#7062)
  • [DeadCode] Handle crash on empty content on SimplifyIfElseWithSameContentRector (#7063)
  • Fix return on SimplifyIfElseWithSameContentRector (#7064)
  • [CodeQuality] Skip when class has __isset() method on IssetOnPropertyObjectToPropertyExistsRector (#7067)
  • [ReplaceArgumentDefaultValueRector] handle multiple replace argument values (#9256) (#7068), Thanks @JohJohan!

New Features 🥳

  • [Php56] Add parentheses on unary minus pow left on PowToExpRector (#7065)

Removed 💀

  • [removal] Remove RectorConfigBuilderRector as not maintained and broken (#7066)

rectorphp/rector-symfony

  • [SYMFONY 4.4] replace Link withRel and withoutRel argument values with constants (#821), Thanks @JohJohan
  • [SYMFONY 5.1] replace Cookie withSameSite argument values with constants (#819), Thanks @JohJohan
  • [SYMFONY 4.2] replace Cookie argument values with constants (#818), Thanks @JohJohan
  • [SYMFONY 3.2] replace Cookie argument values with constants (#817), Thanks @JohJohan
  • [SYMFONY 6.3] replace Link argument values with constants (#816), Thanks @JohJohan
  • [Symfony73] Handle nested array on ConstraintOptionsToNamedArgumentsRector (#815)
  • [Symfony 74] Rename Application::add() to Application::addCommand() (#813), Thanks @mttsch
  • [SYMFONY 4.4] replace Link argument values with constants (#812), Thanks @JohJohan
  • [Symfony 74] Rename Application::add() to Application::addCommand() (#809), Thanks @mttsch

rectorphp/rector-doctrine

  • Update deprecated ArrayItem, Lnumber to use under Node, and Int_ instead (#456)

rectorphp/rector-phpunit

  • Update to use ArrayItem under Node (#504)

rectorphp/rector-downgrade-php

  • [DowngradePhp80] Handle not match @return with native return type on DowngradeUnionTypeDeclarationRector (#295)
  • Clean up origNode set on DowngradeArrayAllRector (#294)
  • [DowngradePhp84] Add DowngradeArrayFindKeyRector (#293)
  • [DowngradePhp84] Add DowngradeArrayFindRector (#292)
  • [DowngradePhp84] Add DowngradeArrayAnyRector (#291)
  • [DowngradePhp84] Add DowngradeArrayAllRector (#290)

Released Rector 2.1.1

10 Jul 11:47

Choose a tag to compare

New Features 🥳

  • [Php84] Add message name on multilines on DeprecatedAnnotationToDeprecatedAttributeRector (#7030)
  • Add SortNamedParamRector (#7047), Thanks @VincentLanglet!

Bugfixes 🐛

  • [CodeQuality] Properly handle Goto_ on ExplicitReturnNullRector (#7018)
  • [Php84] Skip non-array on ForeachToArray* rules (#7023)
  • [Console] Handle hidden "process" with --option without = on ConsoleApplication (#7022)
  • [Php80] Handle with property hook on ClassPropertyAssignToConstructorPromotionRector (#7024)
  • [Scoped] Exclude DateRangeError on Scoper for prefixing (#7027)
  • [Php84] Handle multi lines text on DeprecatedAnnotationToDeprecatedAttributeRector (#7028)
  • [Php55] Avoid $scope = ScopeFetcher::fetch($node); when not needed on GetCalledClassToStaticClassRector (#7029)
  • Fix crash on ExactCompareFactory::createBooleanAnd/Or (#7031)
  • Move ScopeFetcher::fetch() to near its usage (#7032)
  • [CodeQuality][Php84] Handle crash on ForeachToArrayFindRector+OptionalParametersAfterRequiredRector (#7033)
  • [Php84] Skip foreach value used after foreach on ForeachToArray* rules (#7034)
  • [Php84] Handle key used on conditional on ForeachToArray* rules (#7035)
  • [code-quality] Make ctor defined dynamic properties private, as most probably case (#7036)
  • [PostRector] Keep first comment after declare(strict_types=1) on UnusedImportRemovingPostRector (#7042)
  • [Php80] Make configurable to allow skip on model based classes on ClassPropertyAssignToConstructorPromotionRector (#7043)
  • [Kaizen] Save kaizen applied rules into cache to make works on parallel (#7046)
  • [Kaizen] No need filter unchanged files when --kaizen is used (#7050)
  • [Kaizen] When no files changed, early return empty on FilesFinder, even on kaizen (#7051)
  • [Kaizen] Enforce clear cache when there is files changed + kaizen enabled (#7052)
  • Fix ambiguous variable name (#7053)
  • [Php84] Handle with space on message like class name constant on DeprecatedAnnotationToDeprecatedAttributeRector (#7056)
  • [CodeQuality] LogicalToBooleanRector should add parentheses on equal (#7048)
  • [Kaizen] Remove unneeded clean kaizen cache since all cache cleared early when there are files to be changed + kaizen enabled (#7054)



rectorphp/rector-symfony 🎵

  • Fix code style issues (#810), Thanks @mttsch
  • [Symfony 74] Rename Application::add() to Application::addCommand() (#809), Thanks @mttsch
  • Fix links to Symfony 7.2/7.3 upgrade documents (#808), Thanks @mttsch
  • [Symfony 7.3] Handle existing named array arguments in ConstraintOptionsToNamedArgumentsRector (#807), Thanks @gharlan
  • [Symfony 73] add ConstraintOptionsToNamedArgumentsRector (#806), Thanks @pedrocasado
  • Twig attributes: make methods public (#805), Thanks @gharlan
  • AddVoteArgumentToVoteOnAttributeRector (#804), Thanks @tugmaks
  • [CodeQuality] Skip first class callable on StringCastDebugResponseRector (#803)
  • [code-quality] Add StringCastDebugResponseRector (#802)
  • add casting to string to AssertSameResponseCodeWithDebugContentsRector as response can be null, and message requires string (#801)

rectorphp/rector-doctrine 🟠

  • [dbal 3.8] Add MigrateQueryBuilderResetQueryPartRector (#455), Thanks @simonschaufi

rectorphp/rector-phpunit 🟢

  • feat: make AddCoversClassAttributeRector configurable (#502), Thanks @canvural
  • Support PHPUnit 12 in composer based set (#501), Thanks @alleknalle
  • [Attribute] Handle comment below @dataProvider doc on DataProviderAnnotationToAttributeRector (#500)
  • [code-quality] Add StringCastAssertStringContainsStringRector (#498)

Released Rector 2.1

24 Jun 21:49

Choose a tag to compare

This release comes with new PHP 8.4 rules and 2 new config options, that make rules more powerful 💪


New Features 🥳

  • [PHP 8.4] Implement array_find_key upgrade (#7008), Thanks @xHeaven!
  • [PHP 8.4] Implement array_find upgrade (#7009), Thanks @xHeaven!
  • [PHP 8.4] Implement array_all upgrade (#7011), Thanks @xHeaven!
  • [PHP 8.4] Implement array_any upgrade (#7010), Thanks @xHeaven!
  • [code-quality] add TernaryImplodeToImplodeRector (#6994)

In this release we also add 2 DX features to streamline upgrades:

  • [DX] Add ->withTreatClassesAsFinal() on so can be used in typed rules (#6974)
    • this extends more conservative rules to apply on classes that are not final
  • [experimental] Add --kaizen option to apply only first X rules at a time (#6876)
    • this option will apply first X rules; especially great to make upgrade steps small, but relevant - check the PR for more

Bugfixes 🐛

  • [Php80] Skip non-abstract method trait on AddParamBasedOnParentClassMethodRector (#6992)
  • [Php81] Skip has JMS attribute on ReadOnlyPropertyRector (#6979)
  • [TypeDeclaration] Move JMS class string definition constant to ClassName value object (#6980)
  • [PhpAttribute] Ensure count($attributeGroups) before loop to avoid repetitive annotation product only single AttributeGroup (#6985)
  • [code-quality] use direct instanceof instead of dummy null, if nullable object type is known (#6987)
  • Fix object type in TypedPropertyFromJMSSerializerAttributeTypeRector (#6989)
  • ExplicitReturnNullRector: skip on goto (#6988), Thanks @staabm!
  • fix invalid string property type without default in PropertyTypeFromStrictSetterGetterRector (#6993)
  • [CodeQuality] Skip first class callable on TernaryImplodeToImplodeRector (#6997)
  • Fix: Array Duplicated Key which is dynamic (#6999), Thanks @peterfox!
  • [Php83] Ensure class->isAbstract() on FeatureFlags::treatClassesAsFinal() check (#7003)
  • [TypeDeclaration] Handle crash on generic iterable on TypedPropertyFromJMSSerializerAttributeTypeRector (#7004)
  • [TypeDeclaration] Use common has < string for detect iterable types (#7005)
  • Covers scenario where func_get_args used in constructor (#7006), Thanks @peterfox!
  • [DeadCode] Move Param used via variadic functions to ParamAnalyzer (#7016)
  • [DeadCode] Skip used by unpack and named argument on RemoveUnusedPrivateMethodParameterRector (#6976)
  • [DeadCode] Handle multiple default on RemoveArgumentFromDefaultParentCallRector (#6978)
  • [DeadCode] Skip abstract method on RemoveUnusedPublicMethodParameterRector (#7002)
  • [DeadCode] Allow named argument removal if argument position is equal with parameter position equal name on RemoveUnusedPrivateMethodParameterRector (#6977)
  • [Php80] Skip used in finally on RemoveUnusedVariableInCatchRector (#6982)
  • [DeadCode] Allow remove normal param that mix with property promotion on RemoveUnusedConstructorParamRector (#7017)

rectorphp/rector-symfony 🎵

  • fix to type arg name (#800)
  • [jms] Add AccessorAnnotationToAttributeRector (#799)
  • [jms] Add custom AccessTypeAnnotationToAttributeRector to handle annotation flip to attribute correctly (#798)

rectorphp/rector-doctrine 🟠

  • [typed-collections] Add RemoveNullFromInstantiatedArrayCollectionPropertyRector (#452)
  • skip behats (#451)
  • skip RemoveIfInstanceofCollectionRector in tests (#450)
  • add generic union support (#448)
  • add param / return test fixture (#447)
  • add docblock support to NarrowArrayCollectionToCollectionRector (#446)
  • initialize default array even for non-entity-property collections (#445)
  • remover default null (#444)
  • add local call setter support (#443)
  • Add intersection support to NarrowPropertyUnionToCollectionRector (#442)
  • remove nullable property type (#441)
  • Add native return type declaration support to NarrowReturnUnionToCollectionRector (#440)
  • add array-filter to ArrayMapOnCollectionToArrayRector (#439)
  • [typed-collections] Add CurrentOnCollectionToArrayRector (#438)
  • [typed-collections] Add RemoveUselessIsEmptyAssignRector (#437)
  • add boolean and not null case (#436)
  • skip it (#435)
  • [typed-collections] Add RemoveIfCollectionIdenticalToNullRector (#434)
  • add native property type support to NarrowPropertyUnionToCollectionRector (#433)
  • add union null type support to RemoveNullFromNullableCollectionTypeRector (#431)
  • add nullable property doclbock support to RemoveNullFromNullableCollectionTypeRector (#430)
  • [typed-collections] Add ArrayOffsetSetToSetCollectionCallRector (#429)
  • include message as well (#428)
  • add static call support to AssertSameCountOnCollectionToAssertCountRector (#427)
  • keep args in RemoveNullsafeOnCollectionRector (#426)
  • [typed-collections] Add AssertSameCountOnCollectionToAssertCountRector (#425)
  • [typed-collections] Add RemoveAssertNotNullOnCollectionRector (#424)
  • [typed-collections] Add AssertNullOnCollectionToAssertEmptyRector (#423)

Released: Rector 2.0.18

11 Jun 11:23

Choose a tag to compare

New Features 🥳

  • Bump to PHP-Parser ^5.5.0 (#6946)
  • [DeadCode] Add RemoveArgumentFromDefaultParentCallRector (#6949)
  • [DeadCode] Add RemoveDeadCatchRector rule (#6939), Thanks @P3gucka!

Bugfixes 🐛

  • [Php80] Add more exact Expr node that always bool for switch(true) usage on ChangeSwitchToMatchRector (#6965)
  • [Php80] Prevent adding empty return when stringable always throws (#6968), Thanks @Mika-!
  • [php 8.0] Check if class is an attribute in AnnotationToAttributeRector, to avoid non-attribute bug (#6954)
  • [Transform] Fix FQCN usage on new name on MergeInterfacesRector (#6956)
  • Rectify (#6957)
  • [Printer] Skip change new line as space on anonymous class on print (#6958)
  • [Printer] Use regex string new space detection for anonymous class (#6959)
  • [Php80] Handle dynamic bool expr on ChangeSwitchToMatchRector (#6961)
  • [Php80] Do not change to match(true) on defined case cond on ChangeSwitchToMatchRector (#6962)
  • [Php80] Do not change to match(true) on variable from param on case cond on ChangeSwitchToMatchRector (#6963)
  • Fix fixture file name (#6964)
  • [Renaming] [Symfony 7.0] Skip ClassConstFetch that rename its ->class to Interface that constant not exists in new interface (#6966)
  • Fix stub (#6967)
  • [DeadCode] Clean up useless union StmtsAwareInterface|ClassMethod on TerminatedNodeAnalyzer (#6969)
  • [Php80] Handle has silent void on StringableForToStringRector (#6970)
  • [PostRector] Clean up rename process on ClassRenamingPostRector (#6971)
  • [DeadCode] Early check skip no extends on RemoveDefaultArgumentFromParentCallRector (#6950)
  • [DeadCode] Allow remove createMock method call on RemoveUnusedVariableAssignRector (#6951)
  • [DeadCode] Skip when next catch is parent class exception with special treatment over just throw on RemoveDeadCatchRector (#6952)

rectorphp/rector-symfony 🎵

  • [Symfony 7.3] Handle commands without configure method in InvokableCommandInputAttributeRector (#797), Thanks @gharlan
  • [Symfony 7.3] Handle fluent call addArgument and addOption on InvokableCommandInputAttributeRector (#795)
  • Twig attributes: add required first param (#793), Thanks @gharlan
  • Fix namespace of console Option attribute (#792), Thanks @gharlan
  • fix: Normalize variable names by replacing hyphens with underscores in Symfony73 command argument and option processing (#790), Thanks @antoniovj1
  • remove return tags in TemplateAnnotationToThisRenderRector as no longer needed (#788)
  • return array if is array type in TemplateAnnotationToThisRenderRector (#786)
  • Bump to php-parser 5.5.0 and update fixture attributes usage (#784)

rectorphp/rector-doctrine 🟠

  • [typed-collections] Add RemoveNullsafeOnCollectionRector (#420)
  • skip assign of New_ to CollectionParamTypeSetterToCollectionPropertyRector (#419)
  • fix reprint of type in CollectionSetterParamNativeTypeRector (#418)
  • Various improvements in typed-collections set (#417)
  • Skip RemoveNullFromNullableCollectionTypeRector if not exactly 1 param or in tests (#416)
  • [typed-collections] allow 2nd+ param to be nullable in CollectionSetterParamNativeTypeRector as most likely null can be passed as non-setter (#415)
  • cleanup redundant fixtures, single rule (#414)
  • [Dbal40] Skip different object on ExecuteQueryParamsToBindValueRector (#413)
  • [dbal 4.0] Add ExecuteQueryParamsToBindValueRector (#412)
  • [dbal 4.0] Add deprecated PDO class to enum like (#411)
  • [dbal 4.2] Add AddArrayResultColumnNamesRector (#410)

rectorphp/rector-downgrade-php ⬇️

  • [DowngradePhp73] Real patch for previous node token just swapped with trailing comma and named argument (take 2) (#288)
  • [Test] Add more test fixture for downgrade named argument with trailing comma (#287)
  • [Down to PHP 7.2] Handle download named argument with trailing comma (#285)