Releases: rectorphp/rector
Releases · rectorphp/rector
Released Rector 2.2
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:
EnumCaseToPascalCaseRectorskips 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
New Features 🥳
- Php8.5 OrdSingleByteRector (#7219), Thanks @arshidkv12!
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
Released Rector 2.1.5
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
RemoveDuplicatedCaseInSwitchRectorand 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_DEFAULTtoFILTER_UNSAFE_RAW(#7209), Thanks @ddevsr! - [PHP 8.5] Convert
@deprecatedto#[\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
RemoveDuplicatedCaseInSwitchRectorbehavior (#7173), Thanks @max-s-lab! - replace
PHP_EOLwith\nwhen 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
Released Rector 2.1.4
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
New Features 🥳
- Add
ClosureFromCallableToFirstClassCallableRectorrule (#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
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
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
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
--kaizenoption 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
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)