New Features 🥳
- Performance: Improve node name resolver performance (#3506), Thanks @keulinho!
- [CodeQuality] Add SwitchTrueToIfRector (#3535)
- [CodeQuality] Add cast scalar support on ReturnTypeFromStrictScalarRector (#3544)
- Improve ArraySpreadInsteadOfArrayMergeRector (#3551), Thanks @yguedidi!
- Performance: reduce parent attribute usage on BetterNodeFinder (#3504)
- Performance: using findFirst() when possible at BetterNodeFinder (#3505)
- Performance: use direct find() instead of lookup all nodes then filter on BetterNodeFinder (#3507)
- Performance: Use faster hashing algo for cache key generation (#3508), Thanks @keulinho!
Bugfixes 🐛
- Add not null compare to FlipTypeControlToUseExclusiveTypeRector (#3513)
- [CodeQuality] Skip static class const fetch on InlineConstructorDefaultToPropertyRector (#3510)
- [CodingStyle] Make EncapsedStringsToSprintfRector work with two string concat (#3515)
- [CodeQuality] Handle multiple ifs on SimplifyIfExactValueReturnValueRector (#3527)
- [NodeManipulator] Reduce parent attribute usage on VariableManipulator (#3528)
- [NodeTypeResolver] Make NodeTraverser as property on PHPStanNodeScopeResolver (#3533)
- [NodeTypeResolver] Make NodeTraverser as property on NodeScopeAndMetadataDecorator (#3532)
- [NodeAnalyzer] Use PHPStan ClassReflection to detect anonymous class on ClassAnalyzer (#3543)
- [Php81] Merge attributes on NewInInitializerRector (#3546)
- [Php81] Handle assign op append on ReadOnlyPropertyRector (#3552)
- [CodeQuality] Skip empty cases on SwitchTrueToIfRector (#3556)
- RemoveNonExistingVarAnnotationRector: Allow return annotations (#3534), Thanks @jlherren!
- [PostRector] Skip remove unused used at @see for Generic tag (#3562)
- [PostRector] Skip remove unused use on used as ConstFetchNode, eg: TypeKind::* (#3560)
Removed 💀
- [CodeQuality] Remove next node attribute usage on SimplifyIfExactValueReturnValueRector (#3511)
- [CodingStyle] Remove previous node attribute on WrapEncapsedVariableInCurlyBracesRector (#3512)
- [CodeQuality] Remove next node attribute usage on SimplifyIfNotNullReturnRector (#3517)
- Remove deprecated @noRector warning (#3518)
- [CodingStyle] Remove next node attribute on NewlineAfterStatementRector (#3525)
- [Privatization] Remove parent attribute usage on PrivatizeFinalClassMethodRector (#3526)
- [NodeTypeResolver] Remove NodeScopeAndMetadataDecorator::decorateStmtsFromString() method (#3530)
- [DeadCode] Remove previous attribute usage on RemoveDeadConditionAboveReturnRector (#3538)
- [Php70] Remove previous attribute usage on ReduceMultipleDefaultSwitchRector (#3537)
- [CodingStyle] Remove parent attribute usage on RemoveFinalFromConstRector (#3536)
- [CodingStyle] Remove previous node attribute on TernaryConditionVariableAssignmentRector (#3540)
- [DeadCode] Remove previous and parent attribute usage on RemoveNullPropertyInitializationRector (#3541)
- [DeadCode] Remove property comment same line on RemoveUnusedPrivatePropertyRector (#3547)
- [PSR4] Remove clone $node on NormalizeNamespaceByPSR4ComposerAutoloadRector (#3553)
- [PSR4] Remove clone $node on PseudoNamespaceToNamespaceRector (#3554)
- [Tests] Remove RunTestsInSeparateProcesses in rules-tests (#3555)
- [NodeRemover] Use return null after $this->removeNode() (#3558)
- [Php73] Remove next node attribute usage on ArrayKeyFirstLastRector (#3559)