Repository navigation
Update dependency rector/rector to ^2.8.1 - #1114
Merged
Merged
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1114 +/- ##
=======================================
Coverage 99.24% 99.24%
=======================================
Files 180 180
Lines 9612 9612
=======================================
Hits 9539 9539
Misses 73 73 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^2.7.0→^2.8.1Release Notes
rectorphp/rector (rector/rector)
v2.8.1: Released Rector 2.8.1Compare Source
Fixes
v2.8.0: Released Rector 2.8Compare Source
Faster runs, single-pass rules, and a leaner rule set 🚀
The Rector core engine is ~26 % faster (1.36x) with ~8 % less memory than 2.7.0.
If you run PHP 8.3+, it's 3x faster using PHPStan Turbo, the native parsing extension shipped with
phpstan/phpstan:Turbo factor measured on this release via an A/B run on Rector's own
rules/(24-core host, PHP 8.4, cold, identical changed-file fingerprint): ~2.4x wall and ~2.6x worker CPU. Turbo speeds up PHPStan parsing in the workers, so the wall-time gain scales with the available core count.This release is mostly about speed and reliability. A large performance campaign hoists cheap node guards in front of expensive reflection, scope and type lookups across hundreds of rules, replaces per-node config scans in configurable rules with keyed lookups, and resolves short names and unused imports in a single AST walk.
Rules now converge in a single pass: instead of a re-processing guard, the engine iterates rules to a fixed point and tests enforce idempotency, so a rule that changes a file produces the same result whether it runs once or many times.
We also trimmed the rule set: many niche, context-dependent rules that are not part of any set and rarely used are now deprecated. Deprecated rules still run and print a warning; they will be removed in a future major release. The goal is a smaller set of valuable, reliable rules for everyday upgrades.
New features 🥳
ExplicitNullableObjectInstanceRector, replacing 4 nullable-object instanceof rules (#8636)--alloption tolist-rulesto list every rule in core andrector-*packages (#8637)list-rulescommand (#8533)Performance Improvements 🚀
phpstan/phpstan, on PHP 8.3+ - no main-process restart, the workers do the analysis (#8812)Class_/ClassLikenode and addgetClassReflection()toAbstractRector:RemoveParentDelegatingClassMethodRector,ReturnTypeFromMockObjectRector,AddVoidReturnTypeWhereNoReturnRectorandChangeMethodVisibilityRector(#8824, #8827, #8828, #8830, #8831)UseImportNameMatcher::resolveName()and resolve the parent class reflection by name inPhp4ConstructorRector(#8841, #8838)array_values()inBetterStandardPrinter::pArray()(#8814, #8821)ClassReflectionby class content hash to stop memory growth on class refresh (#8731, #8728, #8729)ClassNameImportContext(#8687)realpath()of skip patterns inFileInfoMatcher(#8699)StaticPHPUnitEnvironment::isPHPUnitRunand replace theisStringNamewildcard loop with a singlestrpbrkscan (#8732, #8733)ContextNodeVisitorby tracking loop/try/attribute depth (#8741)NodeComparator::areNodesEqualbefore printing (#8752)enterNode()toFileProcessorso it runs once per file (#8593)ConvertStaticToSelfRector,ArrayToFirstClassCallableRectorandSimplifyEmptyCheckOnEmptyArrayRectorwith cheap guards before scope fetching (#8801, #8796, #8795)foreach(#8761)extends/implementsnames and drop the unused process property on the node scope (#8788, #8792)FileProcessornow that rules converge in a single pass (#8811)Bugfixes 🐛
NewlineBeforeNewAssignSetRector: fix a false positive on a local var and$thisproperty name collision (#8535)SimplifyQuoteEscapeRector: handle strings with accented characters (#8532)TernaryToNullsafeCoalesceRector: skip mixed and untyped calls (#8531)TernaryToNullCoalescingRector: preserve fallback parentheses on theIdentical/NotIdenticalpath (#8674)AddArrowFunctionReturnTypeRector: fix a crash onNonexistentParentClassType(#8568)DowngradeEnumToConstantListClassRectorandRenameMethodRector(#8727)StrContainsRector/MbStrContainsRector: skip a non-zerostrpos()/mb_strpos()offset (#8640, #8642)SplitGroupedClassConstantsRector: preserve the attribute and type (#8650)RemoveUselessUnionReturnDocblockRector: skip astatic/$thisunion@return(#8649)StrictArrayParamDimFetchRector: skip a private method param called with anArrayAccessarg (#8648)ReadOnlyAnonymousClassRector: skip an anonymous class with attributes (#8665)NullToStrictStringFuncCallArgRector: skip an arg already cast to the target type (#8688)AddNameToBooleanArgumentRector: skipsession_set_save_handler(#8750)RemoveDuplicatedCaseInSwitchRector: compare switch case statements node-by-node (#8754)MergePhpstanDocTagIntoNativeRector: keep the native@param/@var/@returndescription (#8781)nullis still reported, acrossrector-doctrine,rector-symfony,rector-phpunitandrector-downgrade-php(doctrine #539, symfony #1087, phpunit #810, downgrade #418)fix(parallel): report the error limit only when it is actually reached (#8844)ChangedFilesDetectorPortableCacheTest(#8537)Deprecations 💀
Deprecated rules still run and print a warning; they will be removed in a future major release. These are niche, context-dependent or rarely used rules outside the main PHP upgrade path.
Transform / Arguments
FuncCallToNewRector(#8776),FuncCallToStaticCallRector(#8775),MethodCallToFuncCallRector(#8769),MethodCallToStaticCallRector(#8770),NewToStaticCallRector(#8768),StaticCallToMethodCallRector(#8759),ConstFetchToClassConstFetchRector(#8771),MergeInterfacesRector(#8772),ArrayDimFetchToMethodCallRector(#8762),StringToClassConstantRector(#8779),RemoveMethodCallParamRector(#8766)ReplaceArgumentDefaultValueRectorandFunctionArgumentDefaultValueReplacerRectorin favor of dedicated rules (#8686, #8692)Renaming
RenameAnnotationRector(#8780),RenameStaticMethodRector(#8777)Naming (and the
SetList::NAMINGset itself)RenameParamToMatchTypeRector(#8553),RenamePropertyToMatchTypeRector(#8547),RenameVariableToMatchNewTypeRector(#8554),RenameVariableToMatchMethodCallReturnTypeRector(#8549),RenameForeachValueVariableToMatchExprVariableRector(#8548),RenameForeachValueVariableToMatchMethodCallReturnTypeRector(#8550), and the naming prepared set warning (#8555)TypeDeclaration
ParamTypeByMethodCallTypeRectorand its Object/Scalar/Array splits (#8567),ParamTypeByParentCallTypeRector(#8813),AddPropertyTypeDeclarationRector(#8774),AddParamStringTypeFromSprintfUseRector(#8723),DeclareStrictTypesRectorin favor ofSafeDeclareStrictTypesRector(#8562),BinaryOpNullableToInstanceofRectorfolded intoExplicitNullableObjectInstanceRector(#8817)CodeQuality / CodingStyle / DeadCode / EarlyReturn / Php
CompleteDynamicPropertiesRector(#8753),SwitchTrueToMatchRector(#8622),InnerFunctionToPrivateMethodRector(#8621),MoveInnerFunctionToTopLevelRector(#8616),ForRepeatedCountToOwnVariableRector(#8620),CallUserFuncWithArrowFunctionToInlineRector(#8615),RemoveUselessIsObjectCheckRector(#8614),SimplifyStrposLowerRector(#8611),SetTypeToCastRector(#8610),ForeachItemsAssignToEmptyArrayToAssignRector(#8577),PostIncDecToPreIncDecRector(#8583),TernaryFalseExpressionToIfRector(#8683),RemoveDeadReturnRectorin favor ofRemoveAlwaysTrueIfConditionRector(#8685),RemoveDuplicatedReturnSelfDocblockRector(#8634),RemoveParentDelegatingConstructorRector(#8755),ChangeConstantVisibilityRector(#8767),AddOverrideAttributeToOverriddenMethodsRector(#8773),RemoveTraitUseRector(#8778),ReturnEarlyIfVariableRector(#8818)Internals ⚙️
tomasvotruba/unused-publicwithshipmonk/dead-code-detector(#8530)NodeVisitorand moveenterNode()out ofAbstractRectorintoRectorRunner(#8541, #8560)RectorRegistryand merge the skipper services into a singleSkipper(#8600, #8601, #8604)symplify/rule-doc-generator-contractsunder theRector\RuleDocnamespace (#8586)@apiannotations, unused collectors, converters and interfaces, thecreated_by_ruleattribute andRectifiedAnalyzer, and the deprecatedwithPhp53Sets()..withPhp74Sets()and cache-meta methods (#8794, #8803, #8804, #8805, #8806, #8807, #8808, #8809, #8810, #8798, #8799)MergePhpstanDocTagIntoNativeRectorin the type-declaration docblock level (#8763)VariableNamingtorector-downgrade-php(#8797, downgrade #417)PhpVersionFeatureand usePhpVersionconstants directly in rules (#8839)custom-ruleandsetup-cicommands, and the unuseddoctrine/inflectordependency (#8815, #8816)NoGetClassReflectionOnScopeRulePHPStan rule and route class reflection through a saferfetchClassLikeReflection(), used inReadonlyClassManipulatorandObjectTypeSpecifier(#8820, #8829, #8832, #8835, #8840)NullToStrictStringIntConverter, use an explicitnulltype in the null-to-strict rules (#8837)rector-doctrine 🟠
AddArrayResultColumnNamesRector(#533)RemoveNullFromNullableCollectionTypeRectorto a singleClass_node and make it idempotent (#535, #534)rector-symfony 🎵
Schedule::with()toadd()and Doctrine middleware renames (#1082)eraseCredentialsbody into an existing__serialize()instead of a deadserialize()(#1085)ReplaceArgumentDefaultValueRectorusages as dedicated rules (#1079)LogoutHandlerToLogoutEventSubscriberRectoridempotent (#1080)StringToArrayArgumentProcessRectorat upper version bounds (#1076, #1075)ServiceMapout of theServiceMapProviderconstructor (#1073)AccessType/Accessorannotation-to-attribute rules and drop the orphaned enum (#1086, #1088)rector-phpunit 🟢
ScenarioToTestAnnotationRectorto replace thescenarioannotation withtest(#809)IdentifierManipulator(#808)WillReturnCallbackFallbackToReturnFalseRector: skip never-returning fall-through and a trailing comment after return (#801, #800)AssertEmptyNullableObjectToAssertInstanceofRector: skip an anonymous class (#792)SuffixMockObjectPropertyRectoras it can produce invalid variable names (#795)AddProphecyTraitRectoridempotent and skip a non-test class early (#806, #793)AssertRegExpRectorand the PHPUnit test-case call guard with a cheap method-name gate (#796, #807)ScenarioToTestAnnotationRectorand drop the deprecatedfindFirstNonAnonymousClass()call (#812, #811)rector-downgrade-php ⬇️
DowngradeIteratorCountToArrayRector, and skipiterator_to_array()/iterator_count()already guarded byis_array()(#414, #415)array_key_first/array_key_lastin a single statement traversal, and convert nested arrow functions to anonymous functions in a single pass (#416, #413)JsonConstCleaner(#410)DowngradeParameterTypeWideningRector(#411)VariableNamingservice moved from core, and fix the missingCOVARIANT_RETURNconstant withPhpVersion::PHP_74(#417, #419)Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.