From 007d526a171b09107fde40a6087118eafaff356d Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 8 Oct 2026 19:24:38 +0200 Subject: [PATCH 1/6] [Performance] Add static node-rule map for O(1) visitor lookup Precompute a node-class to rule map for core + symfony/doctrine/phpunit rules, shipped as config/node-rule-map.json. RectorNodeTraverser uses it to resolve visitors per node class without looping all rules on cold cache. Rules missing from the map (e.g. third-party) fall back to the is_a loop. --- .github/workflows/code_analysis.yaml | 6 + build/build-node-rule-map.php | 114 + composer.json | 1 + config/node-rule-map.json | 2124 +++++++++++++++++ ecs.php | 1 + .../NodeTraverser/RectorNodeTraverser.php | 118 +- .../NodeTraverser/RectorNodeTraverserTest.php | 15 + 7 files changed, 2369 insertions(+), 10 deletions(-) create mode 100644 build/build-node-rule-map.php create mode 100644 config/node-rule-map.json diff --git a/.github/workflows/code_analysis.yaml b/.github/workflows/code_analysis.yaml index d4869162c92..8e4733455a2 100644 --- a/.github/workflows/code_analysis.yaml +++ b/.github/workflows/code_analysis.yaml @@ -28,6 +28,12 @@ jobs: name: 'Preload php-parser Order' run: php preload.php + - + name: 'Node Rule Map Up To Date' + run: | + composer build-node-rule-map + git diff --exit-code config/node-rule-map.json + - name: 'PHPStan' run: vendor/bin/phpstan analyse --ansi diff --git a/build/build-node-rule-map.php b/build/build-node-rule-map.php new file mode 100644 index 00000000000..5c30c3bec59 --- /dev/null +++ b/build/build-node-rule-map.php @@ -0,0 +1,114 @@ +create(); + +// 1. collect rule classes from core + symfony/doctrine/phpunit +$ruleDirectories = [ + $rootDirectory . '/rules', + $rootDirectory . '/vendor/rector/rector-symfony/rules', + $rootDirectory . '/vendor/rector/rector-symfony/src', + $rootDirectory . '/vendor/rector/rector-doctrine/rules', + $rootDirectory . '/vendor/rector/rector-doctrine/src', + $rootDirectory . '/vendor/rector/rector-phpunit/rules', + $rootDirectory . '/vendor/rector/rector-phpunit/src', +]; + +$ruleDirectories = array_filter($ruleDirectories, 'is_dir'); + +$rectorClassFinder = new RectorClassFinder(); +$rectorClasses = $rectorClassFinder->find($ruleDirectories); + +// keep only active Rector rules, skip PostRectors and other *Rector.php helpers +$nodeTypesByRectorClass = []; +foreach ($rectorClasses as $rectorClass) { + if (! is_a($rectorClass, RectorInterface::class, true)) { + continue; + } + + $reflectionClass = new ReflectionClass($rectorClass); + $rector = $reflectionClass->newInstanceWithoutConstructor(); + + $nodeTypesByRectorClass[$rectorClass] = $rector->getNodeTypes(); +} + +// 2. collect all concrete PhpParser node classes, core + Rector custom nodes (e.g. FileNode) +$robotLoader = new RobotLoader(); +$robotLoader->addDirectory($rootDirectory . '/vendor/nikic/php-parser/lib/PhpParser/Node'); +$robotLoader->addDirectory($rootDirectory . '/src/PhpParser/Node'); +$robotLoader->setCacheDirectory(sys_get_temp_dir() . '/rector-node-rule-map'); +$robotLoader->refresh(); + +$nodeClasses = []; +foreach (array_keys($robotLoader->getIndexedClasses()) as $class) { + $reflectionClass = new ReflectionClass($class); + if (! $reflectionClass->isInstantiable()) { + continue; + } + + if (! $reflectionClass->isSubclassOf(Node::class)) { + continue; + } + + $nodeClasses[] = $class; +} + +// 3. resolve rules per concrete node class, mirroring RectorNodeTraverser::getVisitorsForNode() is_a() match +$nodeRuleMap = []; +foreach ($nodeClasses as $nodeClass) { + $matchedRectorClasses = []; + foreach ($nodeTypesByRectorClass as $rectorClass => $nodeTypes) { + foreach ($nodeTypes as $nodeType) { + if (is_a($nodeClass, $nodeType, true)) { + $matchedRectorClasses[] = $rectorClass; + break; + } + } + } + + sort($matchedRectorClasses); + $nodeRuleMap[$nodeClass] = $matchedRectorClasses; +} + +ksort($nodeRuleMap); + +$outputFilePath = $rootDirectory . '/config/node-rule-map.json'; +$json = json_encode($nodeRuleMap, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n"; +file_put_contents($outputFilePath, $json); + +$symfonyStyle->success(sprintf( + 'Generated map for %d node classes from %d rules into %s', + count($nodeRuleMap), + count($nodeTypesByRectorClass), + 'config/node-rule-map.json' +)); + +return Command::SUCCESS; diff --git a/composer.json b/composer.json index 38b96ad6737..8143bcd3646 100644 --- a/composer.json +++ b/composer.json @@ -109,6 +109,7 @@ "rector": "bin/rector process --ansi", "duplicated-code": "vendor/bin/swiss-knife duplicated-code src rules --min-tokens 150 --min-lines 5", "preload": "php build/build-preload.php .", + "build-node-rule-map": "php build/build-node-rule-map.php", "release": "vendor/bin/rng --from-commit X --to-commit Y --remote-repository rectorphp/rector-symfony --remote-repository rectorphp/rector-doctrine --remote-repository rectorphp/rector-phpunit" }, "config": { diff --git a/config/node-rule-map.json b/config/node-rule-map.json new file mode 100644 index 00000000000..1054680b93e --- /dev/null +++ b/config/node-rule-map.json @@ -0,0 +1,2124 @@ +{ + "PhpParser\\Node\\Arg": [], + "PhpParser\\Node\\ArgPlaceholder": [], + "PhpParser\\Node\\ArrayItem": [ + "Rector\\PHPUnit\\CodeQuality\\Rector\\CallLike\\DirectInstanceOverMockArgRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\CallLike\\CreateStubInCoalesceArgRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\CallLike\\CreateStubOverCreateMockArgRector" + ], + "PhpParser\\Node\\Attribute": [ + "Rector\\CodeQuality\\Rector\\Attribute\\ExplicitAttributeNamedArgsRector", + "Rector\\CodeQuality\\Rector\\Attribute\\SortAttributeNamedArgsRector", + "Rector\\Symfony\\Symfony61\\Rector\\Attribute\\RouteRequirementStringToConstantRector" + ], + "PhpParser\\Node\\AttributeGroup": [ + "Rector\\Symfony\\CodeQuality\\Rector\\AttributeGroup\\SingleConditionSecurityAttributeToIsGrantedRector" + ], + "PhpParser\\Node\\ClosureUse": [], + "PhpParser\\Node\\Const_": [], + "PhpParser\\Node\\DeclareItem": [], + "PhpParser\\Node\\Expr\\ArrayDimFetch": [ + "Rector\\Php74\\Rector\\ArrayDimFetch\\CurlyToSquareBracketArrayStringRector", + "Rector\\Php85\\Rector\\ArrayDimFetch\\ArrayFirstLastRector", + "Rector\\Transform\\Rector\\ArrayDimFetch\\ArrayDimFetchToMethodCallRector" + ], + "PhpParser\\Node\\Expr\\Array_": [ + "Rector\\DeadCode\\Rector\\Array_\\RemoveDuplicatedArrayKeyRector", + "Rector\\Php54\\Rector\\Array_\\LongArrayToShortArrayRector", + "Rector\\Php81\\Rector\\Array_\\ArrayToFirstClassCallableRector" + ], + "PhpParser\\Node\\Expr\\ArrowFunction": [ + "Rector\\CodingStyle\\Rector\\ArrowFunction\\ArrowFunctionDelegatingCallToFirstClassCallableRector", + "Rector\\DeadCode\\Rector\\FunctionLike\\NarrowWideUnionReturnTypeRector", + "Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector", + "Rector\\Php80\\Rector\\Class_\\AnnotationToAttributeRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", + "Rector\\TypeDeclaration\\Rector\\ArrowFunction\\AddArrowFunctionReturnTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamStringTypeFromSprintfUseRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ArrayParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ObjectParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ScalarParamTypeByMethodCallTypeRector" + ], + "PhpParser\\Node\\Expr\\Assign": [ + "Rector\\CodeQuality\\Rector\\Assign\\CombinedAssignRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleSelfAssignRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Assign\\ArrayDimFetchAssignToAddCollectionCallRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Assign\\ArrayOffsetSetToSetCollectionCallRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\Assign\\AnyMatcherToNewAnyInvokedCountRector", + "Rector\\Php70\\Rector\\Assign\\ListSplitStringRector", + "Rector\\Php70\\Rector\\FuncCall\\EregToPregMatchRector", + "Rector\\Php71\\Rector\\List_\\ListToArrayDestructRector", + "Rector\\Php72\\Rector\\Unset_\\UnsetCastRector", + "Rector\\Php74\\Rector\\Assign\\NullCoalescingOperatorRector", + "Rector\\Transform\\Rector\\ArrayDimFetch\\ArrayDimFetchToMethodCallRector" + ], + "PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd": [], + "PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr": [], + "PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor": [], + "PhpParser\\Node\\Expr\\AssignOp\\Coalesce": [], + "PhpParser\\Node\\Expr\\AssignOp\\Concat": [ + "Rector\\CodeQuality\\Rector\\AssignOp\\NewArrayItemConcatAssignToAssignRector" + ], + "PhpParser\\Node\\Expr\\AssignOp\\Div": [ + "Rector\\DeadCode\\Rector\\Plus\\RemoveDeadZeroAndOneOperationRector" + ], + "PhpParser\\Node\\Expr\\AssignOp\\Minus": [ + "Rector\\DeadCode\\Rector\\Plus\\RemoveDeadZeroAndOneOperationRector" + ], + "PhpParser\\Node\\Expr\\AssignOp\\Mod": [], + "PhpParser\\Node\\Expr\\AssignOp\\Mul": [ + "Rector\\DeadCode\\Rector\\Plus\\RemoveDeadZeroAndOneOperationRector" + ], + "PhpParser\\Node\\Expr\\AssignOp\\Plus": [ + "Rector\\DeadCode\\Rector\\Plus\\RemoveDeadZeroAndOneOperationRector" + ], + "PhpParser\\Node\\Expr\\AssignOp\\Pow": [], + "PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft": [], + "PhpParser\\Node\\Expr\\AssignOp\\ShiftRight": [], + "PhpParser\\Node\\Expr\\AssignRef": [], + "PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd": [ + "Rector\\CodeQuality\\Rector\\BooleanAnd\\RemoveUselessIsObjectCheckRector", + "Rector\\CodeQuality\\Rector\\BooleanAnd\\RepeatedAndNotEqualToNotInArrayRector", + "Rector\\CodeQuality\\Rector\\BooleanAnd\\SimplifyEmptyArrayCheckRector", + "Rector\\DeadCode\\Rector\\BinaryOp\\RemoveRedundantTypeCheckRector", + "Rector\\DeadCode\\Rector\\BooleanAnd\\RemoveAndTrueRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\If_\\RemoveIfInstanceofCollectionRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Php83\\Rector\\BooleanAnd\\JsonValidateRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector", + "Rector\\TypeDeclaration\\Rector\\BooleanAnd\\BinaryOpNullableToInstanceofRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr": [ + "Rector\\CodeQuality\\Rector\\BooleanOr\\RepeatedOrEqualToInArrayRector", + "Rector\\DeadCode\\Rector\\BinaryOp\\RemoveRedundantTypeCheckRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Php71\\Rector\\BooleanOr\\IsIterableRector", + "Rector\\Php73\\Rector\\BooleanOr\\IsCountableRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector", + "Rector\\TypeDeclaration\\Rector\\BooleanAnd\\BinaryOpNullableToInstanceofRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Coalesce": [ + "Rector\\Doctrine\\TypedCollections\\Rector\\If_\\RemoveIfInstanceofCollectionRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Concat": [ + "Rector\\CodeQuality\\Rector\\Concat\\DirnameDirConcatStringToDirectStringPathRector", + "Rector\\DeadCode\\Rector\\Concat\\RemoveConcatAutocastRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Div": [ + "Rector\\DeadCode\\Rector\\Plus\\RemoveDeadZeroAndOneOperationRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Equal": [ + "Rector\\CodeQuality\\Rector\\Equal\\UseIdenticalOverEqualWithSameTypeRector", + "Rector\\Doctrine\\Dbal32\\Rector\\Identical\\PlatformGetNameToInstanceofRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Php80\\Rector\\Identical\\StrEndsWithRector", + "Rector\\Php80\\Rector\\Identical\\StrStartsWithRector", + "Rector\\Php80\\Rector\\NotIdentical\\MbStrContainsRector", + "Rector\\Php80\\Rector\\NotIdentical\\StrContainsRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Greater": [ + "Rector\\CodeQuality\\Rector\\Identical\\StrlenZeroToIdenticalEmptyStringRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Identical": [ + "Rector\\CodeQuality\\Rector\\Identical\\BooleanNotIdenticalToNotIdenticalRector", + "Rector\\CodeQuality\\Rector\\Identical\\FlipTypeControlToUseExclusiveTypeRector", + "Rector\\CodeQuality\\Rector\\Identical\\SimplifyArraySearchRector", + "Rector\\CodeQuality\\Rector\\Identical\\SimplifyBoolIdenticalTrueRector", + "Rector\\CodeQuality\\Rector\\Identical\\SimplifyConditionsRector", + "Rector\\CodeQuality\\Rector\\Identical\\StrlenZeroToIdenticalEmptyStringRector", + "Rector\\Doctrine\\Dbal32\\Rector\\Identical\\PlatformGetNameToInstanceofRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Php80\\Rector\\Identical\\StrEndsWithRector", + "Rector\\Php80\\Rector\\Identical\\StrStartsWithRector", + "Rector\\Php80\\Rector\\NotIdentical\\MbStrContainsRector", + "Rector\\Php80\\Rector\\NotIdentical\\StrContainsRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd": [ + "Rector\\CodeQuality\\Rector\\LogicalAnd\\LogicalToBooleanRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr": [ + "Rector\\CodeQuality\\Rector\\LogicalAnd\\LogicalToBooleanRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Minus": [ + "Rector\\Carbon\\Rector\\FuncCall\\DateFuncCallToCarbonRector", + "Rector\\DeadCode\\Rector\\Plus\\RemoveDeadZeroAndOneOperationRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Mod": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Mul": [ + "Rector\\DeadCode\\Rector\\Plus\\RemoveDeadZeroAndOneOperationRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\NotEqual": [ + "Rector\\CodeQuality\\Rector\\Equal\\UseIdenticalOverEqualWithSameTypeRector", + "Rector\\CodeQuality\\Rector\\NotEqual\\CommonNotEqualRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Php80\\Rector\\Identical\\StrEndsWithRector", + "Rector\\Php80\\Rector\\Identical\\StrStartsWithRector", + "Rector\\Php80\\Rector\\NotIdentical\\MbStrContainsRector", + "Rector\\Php80\\Rector\\NotIdentical\\StrContainsRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical": [ + "Rector\\CodeQuality\\Rector\\Identical\\FlipTypeControlToUseExclusiveTypeRector", + "Rector\\CodeQuality\\Rector\\Identical\\SimplifyArraySearchRector", + "Rector\\CodeQuality\\Rector\\Identical\\SimplifyBoolIdenticalTrueRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Php80\\Rector\\Identical\\StrEndsWithRector", + "Rector\\Php80\\Rector\\Identical\\StrStartsWithRector", + "Rector\\Php80\\Rector\\NotIdentical\\MbStrContainsRector", + "Rector\\Php80\\Rector\\NotIdentical\\StrContainsRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Pipe": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Plus": [ + "Rector\\DeadCode\\Rector\\Plus\\RemoveDeadZeroAndOneOperationRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Pow": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Smaller": [ + "Rector\\CodeQuality\\Rector\\Identical\\StrlenZeroToIdenticalEmptyStringRector", + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BinaryOp\\Spaceship": [ + "Rector\\Php71\\Rector\\BinaryOp\\BinaryOpBetweenNumberAndStringRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\RequestIsMainRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector" + ], + "PhpParser\\Node\\Expr\\BitwiseNot": [], + "PhpParser\\Node\\Expr\\BooleanNot": [ + "Rector\\CodeQuality\\Rector\\BooleanNot\\NegatedAndsToPositiveOrsRector", + "Rector\\CodeQuality\\Rector\\BooleanNot\\ReplaceConstantBooleanNotRector", + "Rector\\CodeQuality\\Rector\\BooleanNot\\ReplaceMultipleBooleanNotRector", + "Rector\\CodeQuality\\Rector\\BooleanNot\\SimplifyDeMorganBinaryRector", + "Rector\\CodeQuality\\Rector\\Empty_\\SimplifyEmptyCheckOnEmptyArrayRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SingleInArrayToCompareRector", + "Rector\\CodeQuality\\Rector\\Identical\\BooleanNotIdenticalToNotIdenticalRector", + "Rector\\CodeQuality\\Rector\\Identical\\SimplifyConditionsRector", + "Rector\\CodeQuality\\Rector\\Isset_\\IssetOnPropertyObjectToPropertyExistsRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\If_\\RemoveIfInstanceofCollectionRector", + "Rector\\TypeDeclaration\\Rector\\Empty_\\EmptyOnNullableObjectToInstanceOfRector" + ], + "PhpParser\\Node\\Expr\\Cast\\Array_": [ + "Rector\\DeadCode\\Rector\\Cast\\RecastingRemovalRector", + "Rector\\Renaming\\Rector\\Cast\\RenameCastRector" + ], + "PhpParser\\Node\\Expr\\Cast\\Bool_": [ + "Rector\\DeadCode\\Rector\\Cast\\RecastingRemovalRector", + "Rector\\Renaming\\Rector\\Cast\\RenameCastRector", + "Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\ParameterBagTypedGetMethodCallRector" + ], + "PhpParser\\Node\\Expr\\Cast\\Double": [ + "Rector\\DeadCode\\Rector\\Cast\\RecastingRemovalRector", + "Rector\\Renaming\\Rector\\Cast\\RenameCastRector" + ], + "PhpParser\\Node\\Expr\\Cast\\Int_": [ + "Rector\\DeadCode\\Rector\\Cast\\RecastingRemovalRector", + "Rector\\Renaming\\Rector\\Cast\\RenameCastRector" + ], + "PhpParser\\Node\\Expr\\Cast\\Object_": [ + "Rector\\DeadCode\\Rector\\Cast\\RecastingRemovalRector", + "Rector\\Renaming\\Rector\\Cast\\RenameCastRector" + ], + "PhpParser\\Node\\Expr\\Cast\\String_": [ + "Rector\\DeadCode\\Rector\\Cast\\RecastingRemovalRector", + "Rector\\Renaming\\Rector\\Cast\\RenameCastRector" + ], + "PhpParser\\Node\\Expr\\Cast\\Unset_": [ + "Rector\\DeadCode\\Rector\\Cast\\RecastingRemovalRector", + "Rector\\Php72\\Rector\\Unset_\\UnsetCastRector", + "Rector\\Renaming\\Rector\\Cast\\RenameCastRector" + ], + "PhpParser\\Node\\Expr\\Cast\\Void_": [ + "Rector\\DeadCode\\Rector\\Cast\\RecastingRemovalRector", + "Rector\\Renaming\\Rector\\Cast\\RenameCastRector" + ], + "PhpParser\\Node\\Expr\\ClassConstFetch": [ + "Rector\\CodeQuality\\Rector\\ClassConstFetch\\VariableConstFetchToClassConstFetchRector", + "Rector\\Doctrine\\Collection22\\Rector\\CriteriaOrderingConstantsDeprecationRector", + "Rector\\Renaming\\Rector\\ClassConstFetch\\RenameClassConstFetchRector", + "Rector\\Symfony\\Symfony33\\Rector\\ClassConstFetch\\ConsoleExceptionToErrorEventConstantRector" + ], + "PhpParser\\Node\\Expr\\Clone_": [], + "PhpParser\\Node\\Expr\\Closure": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\ClassMethod\\OptionalParametersAfterRequiredRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Catch_\\CatchExceptionNameMatchingTypeRector", + "Rector\\CodingStyle\\Rector\\ClassMethod\\FuncGetArgsToVariadicParamRector", + "Rector\\CodingStyle\\Rector\\ClassMethod\\NewlineBeforeNewAssignSetRector", + "Rector\\CodingStyle\\Rector\\Closure\\ClosureDelegatingCallToFirstClassCallableRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\Closure\\RemoveUnusedClosureVariableUseRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\FunctionLike\\NarrowWideUnionReturnTypeRector", + "Rector\\DeadCode\\Rector\\FunctionLike\\RemoveDeadReturnRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Assign\\RenameVariableToMatchMethodCallReturnTypeRector", + "Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchMethodCallReturnTypeRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php71\\Rector\\Assign\\AssignArrayToStringRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php74\\Rector\\Closure\\ClosureToArrowFunctionRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Class_\\AnnotationToAttributeRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Symfony\\Configs\\Rector\\Closure\\FromServicePublicToDefaultsPublicRector", + "Rector\\Symfony\\Configs\\Rector\\Closure\\MergeServiceNameTypeRector", + "Rector\\Symfony\\Configs\\Rector\\Closure\\RemoveConstructorAutowireServiceRector", + "Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceArgsToServiceNamedArgRector", + "Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSetStringNameToClassNameRector", + "Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceSettersToSettersAutodiscoveryRector", + "Rector\\Symfony\\Configs\\Rector\\Closure\\ServiceTagsToDefaultsAutoconfigureRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector", + "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamStringTypeFromSprintfUseRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ArrayParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ObjectParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ScalarParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictArrayParamDimFetchRector", + "Rector\\TypeDeclaration\\Rector\\Closure\\AddClosureNeverReturnTypeRector", + "Rector\\TypeDeclaration\\Rector\\Closure\\AddClosureVoidReturnTypeWhereNoReturnRector", + "Rector\\TypeDeclaration\\Rector\\Closure\\ClosureReturnTypeFromAssertInstanceOfRector", + "Rector\\TypeDeclaration\\Rector\\Closure\\ClosureReturnTypeRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeFromVariableCallRector" + ], + "PhpParser\\Node\\Expr\\ConstFetch": [ + "Rector\\Php73\\Rector\\ConstFetch\\SensitiveConstantNameRector", + "Rector\\Renaming\\Rector\\ConstFetch\\RenameConstantRector", + "Rector\\Transform\\Rector\\ConstFetch\\ConstFetchToClassConstFetchRector" + ], + "PhpParser\\Node\\Expr\\Empty_": [ + "Rector\\CodeQuality\\Rector\\Empty_\\SimplifyEmptyCheckOnEmptyArrayRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Empty_\\EmptyOnCollectionToIsEmptyCallRector", + "Rector\\TypeDeclaration\\Rector\\Empty_\\EmptyOnNullableObjectToInstanceOfRector" + ], + "PhpParser\\Node\\Expr\\Error": [], + "PhpParser\\Node\\Expr\\ErrorSuppress": [], + "PhpParser\\Node\\Expr\\Eval_": [], + "PhpParser\\Node\\Expr\\Exit_": [], + "PhpParser\\Node\\Expr\\FuncCall": [ + "Rector\\Arguments\\Rector\\FuncCall\\FunctionArgumentDefaultValueReplacerRector", + "Rector\\Carbon\\Rector\\FuncCall\\DateFuncCallToCarbonRector", + "Rector\\Carbon\\Rector\\FuncCall\\TimeFuncCallToCarbonRector", + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToBooleanArgumentRector", + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToNullArgumentRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\ArrayMergeOfNonArraysToSimpleArrayRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\CallUserFuncWithArrowFunctionToInlineRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\CompactToVariablesRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\InlineIsAInstanceOfRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\IsAWithStringWithThirdArgumentRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\RemoveSoleValueSprintfRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SimplifyFuncGetArgsCountRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SimplifyInArrayValuesRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SimplifyStrposLowerRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SingleInArrayToCompareRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SortCallLikeNamedArgsRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\UnwrapSprintfOneArgumentRector", + "Rector\\CodingStyle\\Rector\\FuncCall\\CallUserFuncArrayToVariadicRector", + "Rector\\CodingStyle\\Rector\\FuncCall\\CallUserFuncToMethodCallRector", + "Rector\\CodingStyle\\Rector\\FuncCall\\ConsistentImplodeRector", + "Rector\\CodingStyle\\Rector\\FuncCall\\FunctionFirstClassCallableRector", + "Rector\\CodingStyle\\Rector\\FuncCall\\StrictArraySearchRector", + "Rector\\CodingStyle\\Rector\\FuncCall\\StrictInArrayRector", + "Rector\\CodingStyle\\Rector\\FuncCall\\VersionCompareFuncCallToConstantRector", + "Rector\\DeadCode\\Rector\\FuncCall\\RemoveFilterVarOnExactTypeRector", + "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullArgOnNullDefaultParamRector", + "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullNamedArgOnNullDefaultParamRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\FuncCall\\ArrayMapOnCollectionToArrayRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\FuncCall\\ArrayMergeOnCollectionToArrayRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\FuncCall\\CurrentOnCollectionToArrayRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\FuncCall\\InArrayOnCollectionToContainsCallRector", + "Rector\\Php53\\Rector\\FuncCall\\DirNameFileConstantToDirConstantRector", + "Rector\\Php54\\Rector\\FuncCall\\RemoveReferenceFromCallRector", + "Rector\\Php55\\Rector\\FuncCall\\GetCalledClassToSelfClassRector", + "Rector\\Php55\\Rector\\FuncCall\\GetCalledClassToStaticClassRector", + "Rector\\Php55\\Rector\\FuncCall\\PregReplaceEModifierRector", + "Rector\\Php56\\Rector\\FuncCall\\PowToExpRector", + "Rector\\Php70\\Rector\\FuncCall\\CallUserMethodRector", + "Rector\\Php70\\Rector\\FuncCall\\EregToPregMatchRector", + "Rector\\Php70\\Rector\\FuncCall\\MultiDirnameRector", + "Rector\\Php70\\Rector\\FuncCall\\RandomFunctionRector", + "Rector\\Php70\\Rector\\FuncCall\\RenameMktimeWithoutArgsToTimeRector", + "Rector\\Php71\\Rector\\FuncCall\\RemoveExtraParametersRector", + "Rector\\Php72\\Rector\\FuncCall\\CreateFunctionToAnonymousFunctionRector", + "Rector\\Php72\\Rector\\FuncCall\\StringifyDefineRector", + "Rector\\Php72\\Rector\\FuncCall\\StringsAssertNakedRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeysToArrayKeyFirstLastRector", + "Rector\\Php73\\Rector\\FuncCall\\SensitiveDefineRector", + "Rector\\Php73\\Rector\\FuncCall\\SetCookieRector", + "Rector\\Php73\\Rector\\FuncCall\\StringifyStrNeedlesRector", + "Rector\\Php74\\Rector\\FuncCall\\ArrayKeyExistsOnPropertyRector", + "Rector\\Php74\\Rector\\FuncCall\\FilterVarToAddSlashesRector", + "Rector\\Php74\\Rector\\FuncCall\\HebrevcToNl2brHebrevRector", + "Rector\\Php74\\Rector\\FuncCall\\MbStrrposEncodingArgumentPositionRector", + "Rector\\Php74\\Rector\\FuncCall\\MoneyFormatToNumberFormatRector", + "Rector\\Php74\\Rector\\FuncCall\\RestoreIncludePathToIniRestoreRector", + "Rector\\Php80\\Rector\\FuncCall\\ClassOnObjectRector", + "Rector\\Php81\\Rector\\FuncCall\\NullToStrictIntPregSlitFuncCallLimitArgRector", + "Rector\\Php81\\Rector\\FuncCall\\NullToStrictStringFuncCallArgRector", + "Rector\\Php82\\Rector\\FuncCall\\Utf8DecodeEncodeToMbConvertEncodingRector", + "Rector\\Php83\\Rector\\FuncCall\\CombineHostPortLdapUriRector", + "Rector\\Php83\\Rector\\FuncCall\\DynamicClassConstFetchRector", + "Rector\\Php83\\Rector\\FuncCall\\RemoveGetClassGetParentClassNoArgsRector", + "Rector\\Php84\\Rector\\FuncCall\\AddEscapeArgumentRector", + "Rector\\Php84\\Rector\\FuncCall\\RoundingModeEnumRector", + "Rector\\Php85\\Rector\\FuncCall\\ArrayKeyExistsNullToEmptyStringRector", + "Rector\\Php85\\Rector\\FuncCall\\ChrArgModuloRector", + "Rector\\Php85\\Rector\\FuncCall\\OrdSingleByteRector", + "Rector\\Php85\\Rector\\FuncCall\\RemoveFinfoBufferContextArgRector", + "Rector\\Php86\\Rector\\FuncCall\\MinMaxToClampRector", + "Rector\\Removing\\Rector\\FuncCall\\RemoveFuncCallArgRector", + "Rector\\Renaming\\Rector\\FuncCall\\RenameFunctionRector", + "Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\ParameterBagTypedGetMethodCallRector", + "Rector\\Symfony\\Symfony60\\Rector\\FuncCall\\ContainerInterfaceServiceToServiceContainerRector", + "Rector\\Transform\\Rector\\FuncCall\\FuncCallToConstFetchRector", + "Rector\\Transform\\Rector\\FuncCall\\FuncCallToNewRector", + "Rector\\Transform\\Rector\\FuncCall\\FuncCallToStaticCallRector", + "Rector\\TypeDeclaration\\Rector\\FuncCall\\AddArrayAnyAllClosureParamTypeRector", + "Rector\\TypeDeclaration\\Rector\\FuncCall\\AddArrayFunctionClosureParamTypeRector", + "Rector\\TypeDeclaration\\Rector\\FuncCall\\AddArrowFunctionParamArrayWhereDimFetchRector", + "Rector\\TypeDeclaration\\Rector\\FuncCall\\NarrowArrayAnyAllNullableParamTypeRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeForArrayMapRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeForArrayReduceRector" + ], + "PhpParser\\Node\\Expr\\Include_": [ + "Rector\\CodeQuality\\Rector\\Include_\\AbsolutizeRequireAndIncludePathRector" + ], + "PhpParser\\Node\\Expr\\Instanceof_": [], + "PhpParser\\Node\\Expr\\Isset_": [ + "Rector\\CodeQuality\\Rector\\Isset_\\IssetOnPropertyObjectToPropertyExistsRector", + "Rector\\Transform\\Rector\\ArrayDimFetch\\ArrayDimFetchToMethodCallRector" + ], + "PhpParser\\Node\\Expr\\List_": [ + "Rector\\Php70\\Rector\\List_\\EmptyListRector" + ], + "PhpParser\\Node\\Expr\\Match_": [], + "PhpParser\\Node\\Expr\\MethodCall": [ + "Rector\\Arguments\\Rector\\ClassMethod\\ArgumentAdderRector", + "Rector\\Arguments\\Rector\\ClassMethod\\ReplaceArgumentDefaultValueRector", + "Rector\\Arguments\\Rector\\MethodCall\\RemoveMethodCallParamRector", + "Rector\\Carbon\\Rector\\MethodCall\\DateTimeMethodCallToCarbonRector", + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToBooleanArgumentRector", + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToNullArgumentRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SortCallLikeNamedArgsRector", + "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullArgOnNullDefaultParamRector", + "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullNamedArgOnNullDefaultParamRector", + "Rector\\Doctrine\\Collection22\\Rector\\CriteriaOrderingConstantsDeprecationRector", + "Rector\\Doctrine\\Dbal211\\Rector\\MethodCall\\ExtractArrayArgOnQueryBuilderSelectRector", + "Rector\\Doctrine\\Dbal211\\Rector\\MethodCall\\ReplaceFetchAllMethodCallRector", + "Rector\\Doctrine\\Dbal31\\Rector\\MethodCall\\QueryBuilderExecuteToExecuteQueryOrExecuteStatementRector", + "Rector\\Doctrine\\Dbal36\\Rector\\MethodCall\\MigrateQueryBuilderResetQueryPartRector", + "Rector\\Doctrine\\Dbal40\\Rector\\MethodCall\\ChangeCompositeExpressionAddMultipleWithWithRector", + "Rector\\Doctrine\\DoctrineFixture\\Rector\\MethodCall\\AddGetReferenceTypeRector", + "Rector\\Doctrine\\Orm28\\Rector\\MethodCall\\IterateToToIterableRector", + "Rector\\Doctrine\\Orm30\\Rector\\MethodCall\\CastDoctrineExprToStringRector", + "Rector\\Doctrine\\Orm30\\Rector\\MethodCall\\SetParametersArrayToCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\AssertNullOnCollectionToAssertEmptyRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\AssertSameCountOnCollectionToAssertCountRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\SetArrayToNewCollectionRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\CallLike\\DirectInstanceOverMockArgRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertCompareOnCountableWithMethodToAssertCountRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertComparisonToSpecificMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertEmptyNullableObjectToAssertInstanceofRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertEqualsOrAssertSameFloatParameterToSpecificMethodsTypeRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertEqualsToSameRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertFalseStrposToContainsRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertInstanceOfComparisonRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertIssetToSpecificMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertNotOperatorRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertSameBoolNullToSpecificMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertSameTrueFalseToAssertTrueFalseRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertThatToDirectAssertRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertTrueFalseToSpecificMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\CallbackSingleAssertToSimplerRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\FlipAssertRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\MatchAssertSameExpectedTypeRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\MergeWithCallableAndWillReturnRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\NarrowIdenticalWithConsecutiveRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\NarrowSingleWillReturnCallbackRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\RemoveExpectAnyFromMockRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\ScalarArgumentToExpectedParamTypeRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\SimplerWithIsInstanceOfRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\SingleWithConsecutiveToWithRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\StringCastAssertStringContainsStringRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWillMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWithMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\WithCallbackIdenticalToStandaloneAssertsRector", + "Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\PropertyExistsWithoutAssertRector", + "Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\RemoveSetMethodsMethodCallRector", + "Rector\\PHPUnit\\PHPUnit110\\Rector\\CallLike\\AssertContainsOnlyMethodCallRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\CallLike\\CreateStubInCoalesceArgRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\CallLike\\CreateStubOverCreateMockArgRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\Class_\\AssertIsTypeMethodCallRector", + "Rector\\PHPUnit\\PHPUnit50\\Rector\\StaticCall\\GetMockRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\GetMockBuilderGetMockToCreateMockRector", + "Rector\\PHPUnit\\PHPUnit80\\Rector\\MethodCall\\AssertEqualsParameterToSpecificMethodsTypeRector", + "Rector\\PHPUnit\\PHPUnit80\\Rector\\MethodCall\\SpecificAssertContainsRector", + "Rector\\PHPUnit\\PHPUnit80\\Rector\\MethodCall\\SpecificAssertInternalTypeRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\ExplicitPhpErrorApiRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\ReplaceAtMethodWithDesiredMatcherRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\SpecificAssertContainsWithoutIdentityRector", + "Rector\\Php54\\Rector\\FuncCall\\RemoveReferenceFromCallRector", + "Rector\\Php71\\Rector\\FuncCall\\RemoveExtraParametersRector", + "Rector\\Php81\\Rector\\MethodCall\\MyCLabsMethodCallToEnumConstRector", + "Rector\\Php81\\Rector\\MethodCall\\SpatieEnumMethodCallToEnumConstRector", + "Rector\\Php84\\Rector\\FuncCall\\AddEscapeArgumentRector", + "Rector\\Php84\\Rector\\MethodCall\\NewMethodCallWithoutParenthesesRector", + "Rector\\Php85\\Rector\\FuncCall\\RemoveFinfoBufferContextArgRector", + "Rector\\Removing\\Rector\\ClassMethod\\ArgumentRemoverRector", + "Rector\\Renaming\\Rector\\MethodCall\\RenameMethodRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector", + "Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\AssertSameResponseCodeWithDebugContentsRector", + "Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\ParameterBagTypedGetMethodCallRector", + "Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\StringCastDebugResponseRector", + "Rector\\Symfony\\Configs\\Rector\\MethodCall\\EnableValidationAttributesRector", + "Rector\\Symfony\\Symfony25\\Rector\\MethodCall\\AddViolationToBuildViolationRector", + "Rector\\Symfony\\Symfony25\\Rector\\MethodCall\\MaxLengthSymfonyFormOptionToAttrRector", + "Rector\\Symfony\\Symfony26\\Rector\\MethodCall\\RedirectToRouteRector", + "Rector\\Symfony\\Symfony27\\Rector\\MethodCall\\ChangeCollectionTypeOptionNameFromTypeToEntryTypeRector", + "Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\ChangeStringCollectionOptionToConstantRector", + "Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\FormTypeInstanceToClassConstRector", + "Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\OptionNameRector", + "Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\ReadOnlyOptionToAttributeRector", + "Rector\\Symfony\\Symfony30\\Rector\\MethodCall\\StringFormTypeToClassRector", + "Rector\\Symfony\\Symfony34\\Rector\\Closure\\ContainerGetNameToTypeInTestsRector", + "Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\ContainerBuilderCompileEnvArgumentRector", + "Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\VarDumperTestTraitMethodArgsRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\StringToArrayArgumentProcessRector", + "Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\ConvertRenderTemplateShortNotationToBundleSyntaxRector", + "Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\GetCurrencyBundleMethodCallsToIntlRector", + "Rector\\Symfony\\Symfony43\\Rector\\MethodCall\\MakeDispatchFirstArgumentEventRector", + "Rector\\Symfony\\Symfony44\\Rector\\MethodCall\\AuthorizationCheckerIsGrantedExtractorRector", + "Rector\\Symfony\\Symfony44\\Rector\\MethodCall\\WebLinkStringRelationsToConstantsRector", + "Rector\\Symfony\\Symfony52\\Rector\\MethodCall\\DefinitionAliasSetPrivateToSetPublicRector", + "Rector\\Symfony\\Symfony52\\Rector\\MethodCall\\FormBuilderSetDataMapperRector", + "Rector\\Symfony\\Symfony52\\Rector\\MethodCall\\ReflectionExtractorEnableMagicCallExtractorRector", + "Rector\\Symfony\\Symfony52\\Rector\\MethodCall\\ValidatorBuilderEnableAnnotationMappingRector", + "Rector\\Symfony\\Symfony81\\Rector\\MethodCall\\ConstraintValidatorValidateToValidateInContextRector", + "Rector\\Symfony\\Symfony81\\Rector\\MethodCall\\RenameCopyOnWindowsOptionToFollowSymlinksRector", + "Rector\\Transform\\Rector\\MethodCall\\MethodCallToFuncCallRector", + "Rector\\Transform\\Rector\\MethodCall\\MethodCallToStaticCallRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeFromIterableMethodCallRector" + ], + "PhpParser\\Node\\Expr\\New_": [ + "Rector\\Arguments\\Rector\\ClassMethod\\ReplaceArgumentDefaultValueRector", + "Rector\\Carbon\\Rector\\New_\\DateTimeInstanceToCarbonRector", + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToBooleanArgumentRector", + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToNullArgumentRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SortCallLikeNamedArgsRector", + "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullArgOnNullDefaultParamRector", + "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullNamedArgOnNullDefaultParamRector", + "Rector\\Doctrine\\Dbal42\\Rector\\New_\\AddArrayResultColumnNamesRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\SetArrayToNewCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\New_\\RemoveNewArrayCollectionWrapRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\CallLike\\DirectInstanceOverMockArgRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\ScalarArgumentToExpectedParamTypeRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\CallLike\\CreateStubInCoalesceArgRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\CallLike\\CreateStubOverCreateMockArgRector", + "Rector\\Php81\\Rector\\New_\\MyCLabsConstructorCallToEnumFromRector", + "Rector\\Php82\\Rector\\New_\\FilesystemIteratorSkipDotsRector", + "Rector\\Symfony\\CodeQuality\\Rector\\BinaryOp\\ResponseStatusCodeRector", + "Rector\\Symfony\\Symfony40\\Rector\\ConstFetch\\ConstraintUrlOptionRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\StringToArrayArgumentProcessRector", + "Rector\\Symfony\\Symfony44\\Rector\\MethodCall\\WebLinkStringRelationsToConstantsRector", + "Rector\\Symfony\\Symfony52\\Rector\\New_\\PropertyAccessorCreationBooleanToFlagsRector", + "Rector\\Symfony\\Symfony52\\Rector\\New_\\PropertyPathMapperToDataMapperRector", + "Rector\\Symfony\\Symfony73\\Rector\\Class_\\ConstraintOptionsToNamedArgumentsRector", + "Rector\\Symfony\\Symfony81\\Rector\\New_\\RemoveEraseCredentialsFromAuthenticatorManagerRector", + "Rector\\Transform\\Rector\\New_\\NewToStaticCallRector" + ], + "PhpParser\\Node\\Expr\\NullsafeMethodCall": [ + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToBooleanArgumentRector", + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToNullArgumentRector", + "Rector\\CodeQuality\\Rector\\NullsafeMethodCall\\CleanupUnneededNullsafeOperatorRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\NullsafeMethodCall\\RemoveNullsafeOnCollectionRector", + "Rector\\Renaming\\Rector\\MethodCall\\RenameMethodRector" + ], + "PhpParser\\Node\\Expr\\NullsafePropertyFetch": [], + "PhpParser\\Node\\Expr\\PostDec": [], + "PhpParser\\Node\\Expr\\PostInc": [], + "PhpParser\\Node\\Expr\\PreDec": [], + "PhpParser\\Node\\Expr\\PreInc": [], + "PhpParser\\Node\\Expr\\Print_": [], + "PhpParser\\Node\\Expr\\PropertyFetch": [ + "Rector\\Renaming\\Rector\\PropertyFetch\\RenamePropertyRector" + ], + "PhpParser\\Node\\Expr\\ShellExec": [ + "Rector\\Php85\\Rector\\ShellExec\\ShellExecFunctionCallOverBackticksRector" + ], + "PhpParser\\Node\\Expr\\StaticCall": [ + "Rector\\Arguments\\Rector\\ClassMethod\\ArgumentAdderRector", + "Rector\\Arguments\\Rector\\ClassMethod\\ReplaceArgumentDefaultValueRector", + "Rector\\Arguments\\Rector\\MethodCall\\RemoveMethodCallParamRector", + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToBooleanArgumentRector", + "Rector\\CodeQuality\\Rector\\CallLike\\AddNameToNullArgumentRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SortCallLikeNamedArgsRector", + "Rector\\CodingStyle\\Rector\\FuncCall\\ClosureFromCallableToFirstClassCallableRector", + "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullArgOnNullDefaultParamRector", + "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullNamedArgOnNullDefaultParamRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\AssertSameCountOnCollectionToAssertCountRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\SetArrayToNewCollectionRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\CallLike\\DirectInstanceOverMockArgRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertCompareOnCountableWithMethodToAssertCountRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertComparisonToSpecificMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertEqualsToSameRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertFalseStrposToContainsRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertInstanceOfComparisonRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertIssetToSpecificMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertNotOperatorRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertSameBoolNullToSpecificMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\AssertTrueFalseToSpecificMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\FlipAssertRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\MatchAssertSameExpectedTypeRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\ScalarArgumentToExpectedParamTypeRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\StringCastAssertStringContainsStringRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWillMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWithMethodRector", + "Rector\\PHPUnit\\PHPUnit110\\Rector\\CallLike\\AssertContainsOnlyMethodCallRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\CallLike\\CreateStubInCoalesceArgRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\CallLike\\CreateStubOverCreateMockArgRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\Class_\\AssertIsTypeMethodCallRector", + "Rector\\PHPUnit\\PHPUnit50\\Rector\\StaticCall\\GetMockRector", + "Rector\\PHPUnit\\PHPUnit80\\Rector\\MethodCall\\AssertEqualsParameterToSpecificMethodsTypeRector", + "Rector\\PHPUnit\\PHPUnit80\\Rector\\MethodCall\\SpecificAssertContainsRector", + "Rector\\PHPUnit\\PHPUnit80\\Rector\\MethodCall\\SpecificAssertInternalTypeRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\ExplicitPhpErrorApiRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\SpecificAssertContainsWithoutIdentityRector", + "Rector\\Php54\\Rector\\FuncCall\\RemoveReferenceFromCallRector", + "Rector\\Php71\\Rector\\FuncCall\\RemoveExtraParametersRector", + "Rector\\Php74\\Rector\\StaticCall\\ExportToReflectionFunctionRector", + "Rector\\Php81\\Rector\\MethodCall\\MyCLabsMethodCallToEnumConstRector", + "Rector\\Php81\\Rector\\MethodCall\\SpatieEnumMethodCallToEnumConstRector", + "Rector\\Removing\\Rector\\ClassMethod\\ArgumentRemoverRector", + "Rector\\Renaming\\Rector\\MethodCall\\RenameMethodRector", + "Rector\\Renaming\\Rector\\StaticCall\\RenameStaticMethodRector", + "Rector\\Symfony\\CodeQuality\\Rector\\MethodCall\\StringCastDebugResponseRector", + "Rector\\Symfony\\Symfony28\\Rector\\StaticCall\\ParseFileRector", + "Rector\\Symfony\\Symfony52\\Rector\\StaticCall\\BinaryFileResponseCreateToNewInstanceRector", + "Rector\\Symfony\\Symfony81\\Rector\\StaticCall\\AddFormatArgumentToIsValidRector", + "Rector\\Transform\\Rector\\StaticCall\\StaticCallToFuncCallRector", + "Rector\\Transform\\Rector\\StaticCall\\StaticCallToNewRector" + ], + "PhpParser\\Node\\Expr\\StaticPropertyFetch": [ + "Rector\\Renaming\\Rector\\PropertyFetch\\RenamePropertyRector", + "Rector\\Symfony\\Symfony53\\Rector\\StaticPropertyFetch\\KernelTestCaseContainerPropertyDeprecationRector", + "Rector\\Symfony\\Symfony61\\Rector\\StaticPropertyFetch\\ErrorNamesPropertyToConstantRector" + ], + "PhpParser\\Node\\Expr\\Ternary": [ + "Rector\\CodeQuality\\Rector\\If_\\ArrayExplicitBoolCompareRector", + "Rector\\CodeQuality\\Rector\\If_\\ObjectExplicitBoolCompareRector", + "Rector\\CodeQuality\\Rector\\Ternary\\ArrayKeyExistsTernaryThenValueToCoalescingRector", + "Rector\\CodeQuality\\Rector\\Ternary\\NumberCompareToMaxFuncCallRector", + "Rector\\CodeQuality\\Rector\\Ternary\\SimplifyTautologyTernaryRector", + "Rector\\CodeQuality\\Rector\\Ternary\\TernaryEmptyArrayArrayDimFetchToCoalesceRector", + "Rector\\CodeQuality\\Rector\\Ternary\\TernaryImplodeToImplodeRector", + "Rector\\CodeQuality\\Rector\\Ternary\\UnnecessaryTernaryExpressionRector", + "Rector\\CodingStyle\\Rector\\Ternary\\TernaryConditionVariableAssignmentRector", + "Rector\\DeadCode\\Rector\\Ternary\\RemoveUselessTernaryRector", + "Rector\\DeadCode\\Rector\\Ternary\\TernaryToBooleanOrFalseToBooleanAndRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\If_\\RemoveIfInstanceofCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\If_\\RemoveIsArrayOnCollectionRector", + "Rector\\Instanceof_\\Rector\\Ternary\\FlipNegatedTernaryInstanceofRector", + "Rector\\Php53\\Rector\\Ternary\\TernaryToElvisRector", + "Rector\\Php70\\Rector\\Ternary\\TernaryToNullCoalescingRector", + "Rector\\Php70\\Rector\\Ternary\\TernaryToSpaceshipRector", + "Rector\\Php74\\Rector\\Ternary\\ParenthesizeNestedTernaryRector", + "Rector\\Php80\\Rector\\Ternary\\GetDebugTypeRector", + "Rector\\Php80\\Rector\\Ternary\\TernaryToNullsafeCoalesceRector" + ], + "PhpParser\\Node\\Expr\\Throw_": [], + "PhpParser\\Node\\Expr\\UnaryMinus": [], + "PhpParser\\Node\\Expr\\UnaryPlus": [], + "PhpParser\\Node\\Expr\\Variable": [ + "Rector\\Php53\\Rector\\Variable\\ReplaceHttpServerVarsByServerRector", + "Rector\\Php70\\Rector\\Variable\\WrapVariableVariableNameInCurlyBracesRector" + ], + "PhpParser\\Node\\Expr\\YieldFrom": [], + "PhpParser\\Node\\Expr\\Yield_": [], + "PhpParser\\Node\\Identifier": [], + "PhpParser\\Node\\InterpolatedStringPart": [], + "PhpParser\\Node\\IntersectionType": [], + "PhpParser\\Node\\MatchArm": [], + "PhpParser\\Node\\Name": [ + "Rector\\Renaming\\Rector\\Name\\RenameClassRector" + ], + "PhpParser\\Node\\Name\\FullyQualified": [ + "Rector\\Renaming\\Rector\\Name\\RenameClassRector" + ], + "PhpParser\\Node\\Name\\Relative": [ + "Rector\\Renaming\\Rector\\Name\\RenameClassRector" + ], + "PhpParser\\Node\\NullableType": [], + "PhpParser\\Node\\Param": [ + "Rector\\DeadCode\\Rector\\Property\\RemoveUselessReadOnlyTagRector", + "Rector\\Php80\\Rector\\Class_\\AnnotationToAttributeRector", + "Rector\\Php80\\Rector\\Property\\NestedAnnotationToAttributeRector", + "Rector\\Php84\\Rector\\Param\\ExplicitNullableParamTypeRector", + "Rector\\Renaming\\Rector\\Class_\\RenameAttributeRector", + "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Property\\MergePhpstanDocTagIntoNativeRector" + ], + "PhpParser\\Node\\PropertyHook": [ + "Rector\\Renaming\\Rector\\Name\\RenameClassRector" + ], + "PhpParser\\Node\\PropertyItem": [], + "PhpParser\\Node\\Scalar\\Float_": [], + "PhpParser\\Node\\Scalar\\Int_": [], + "PhpParser\\Node\\Scalar\\InterpolatedString": [ + "Rector\\Php82\\Rector\\Encapsed\\VariableInStringInterpolationFixerRector" + ], + "PhpParser\\Node\\Scalar\\MagicConst\\Class_": [ + "Rector\\Php55\\Rector\\Class_\\ClassConstantToSelfClassRector" + ], + "PhpParser\\Node\\Scalar\\MagicConst\\Dir": [], + "PhpParser\\Node\\Scalar\\MagicConst\\File": [], + "PhpParser\\Node\\Scalar\\MagicConst\\Function_": [], + "PhpParser\\Node\\Scalar\\MagicConst\\Line": [], + "PhpParser\\Node\\Scalar\\MagicConst\\Method": [], + "PhpParser\\Node\\Scalar\\MagicConst\\Namespace_": [], + "PhpParser\\Node\\Scalar\\MagicConst\\Property": [], + "PhpParser\\Node\\Scalar\\MagicConst\\Trait_": [], + "PhpParser\\Node\\Scalar\\String_": [ + "Rector\\CodingStyle\\Rector\\String_\\SimplifyQuoteEscapeRector", + "Rector\\CodingStyle\\Rector\\String_\\UseClassKeywordForClassNameResolutionRector", + "Rector\\Php55\\Rector\\String_\\StringClassNameToClassConstantRector", + "Rector\\Php73\\Rector\\FuncCall\\RegexDashEscapeRector", + "Rector\\Php73\\Rector\\String_\\SensitiveHereNowDocRector", + "Rector\\Renaming\\Rector\\String_\\RenameStringRector", + "Rector\\Symfony\\Symfony33\\Rector\\ClassConstFetch\\ConsoleExceptionToErrorEventConstantRector", + "Rector\\Transform\\Rector\\String_\\StringToClassConstantRector" + ], + "PhpParser\\Node\\StaticVar": [], + "PhpParser\\Node\\Stmt\\Block": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\Block\\ReplaceBlockToItsStmtsRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\Break_": [ + "Rector\\Php54\\Rector\\Break_\\RemoveZeroBreakContinueRector", + "Rector\\Php70\\Rector\\Break_\\BreakNotInLoopOrSwitchToReturnRector" + ], + "PhpParser\\Node\\Stmt\\Case_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\Catch_": [ + "Rector\\CodeQuality\\Rector\\Catch_\\ThrowWithPreviousExceptionRector", + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\ClassConst": [ + "Rector\\CodingStyle\\Rector\\ClassConst\\SplitGroupedClassConstantsRector", + "Rector\\DeadCode\\Rector\\ClassConst\\RemoveUnusedPrivateClassConstantRector", + "Rector\\DeadCode\\Rector\\Property\\RemoveUselessVarTagRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Property\\MergePhpstanDocTagIntoNativeRector" + ], + "PhpParser\\Node\\Stmt\\ClassMethod": [ + "Rector\\Arguments\\Rector\\ClassMethod\\ReplaceArgumentDefaultValueRector", + "Rector\\CodeQuality\\Rector\\ClassMethod\\ExplicitReturnNullRector", + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\ClassMethod\\OptionalParametersAfterRequiredRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Catch_\\CatchExceptionNameMatchingTypeRector", + "Rector\\CodingStyle\\Rector\\ClassMethod\\FuncGetArgsToVariadicParamRector", + "Rector\\CodingStyle\\Rector\\ClassMethod\\NewlineBeforeNewAssignSetRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveUnusedVariableAssignRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveDuplicatedReturnSelfDocblockRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveMixedDocblockOverruledByNativeTypeRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveNullTagValueNodeRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveParentDelegatingClassMethodRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveParentDelegatingConstructorRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveReturnTagIncompatibleWithNativeTypeRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessAssignFromPropertyPromotionRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessParamTagRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessReturnExprInConstructRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessReturnTagRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessUnionReturnDocblockRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveVoidDocblockFromMagicMethodRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\FunctionLike\\NarrowWideUnionReturnTypeRector", + "Rector\\DeadCode\\Rector\\FunctionLike\\RemoveDeadReturnRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\Doctrine\\Orm214\\Rector\\Param\\ReplaceLifecycleEventArgsByDedicatedEventArgsRector", + "Rector\\Doctrine\\Orm28\\Rector\\MethodCall\\IterateToToIterableRector", + "Rector\\Doctrine\\Orm30\\Rector\\MethodCall\\SetParametersArrayToCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionDocblockGenericTypeRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionGetterNativeTypeRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionParamTypeSetterToCollectionPropertyRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\CollectionSetterParamNativeTypeRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\DefaultCollectionKeyRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\NarrowArrayCollectionToCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\NarrowParamUnionToCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\NarrowReturnUnionToCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\RemoveNewArrayCollectionOutsideConstructorRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\RemoveNullFromNullableCollectionTypeRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\ReturnArrayToNewArrayCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\ReturnCollectionDocblockRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Assign\\RenameVariableToMatchMethodCallReturnTypeRector", + "Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector", + "Rector\\Naming\\Rector\\ClassMethod\\RenameVariableToMatchNewTypeRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchMethodCallReturnTypeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DataProviderAnnotationToAttributeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\TestWithAnnotationToAttributeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\CoversAnnotationWithValueToAttributeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\RequiresAnnotationWithValueToAttributeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\TicketAnnotationToAttributeRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddInstanceofAssertForNullableArgumentRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddInstanceofAssertForNullableInstanceRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddKeysExistsAssertForKeyUseRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AssertClassToThisAssertRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\BareCreateMockAssignToDirectUseRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\ChangeMockObjectReturnUnionToIntersectionRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\DataProviderArrayItemsNewLinedRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\EntityDocumentCreateMockToDirectNewRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\NoSetupWithParentCallOverrideRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\RemoveEmptyTestMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\RemoveStandaloneCreateMockRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\ReplaceTestAnnotationWithPrefixedFunctionRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Expression\\DecorateWillReturnMapWithExpectsMockRector", + "Rector\\PHPUnit\\PHPUnit110\\Rector\\ClassMethod\\ExpectsParamToMockObjectRector", + "Rector\\PHPUnit\\PHPUnit110\\Rector\\ClassMethod\\MockObjectArgCreateStubToCreateMockRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\CallLike\\CreateStubOverCreateMockArgRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\ClassMethod\\ExpressionCreateMockToCreateStubRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\MethodCall\\ExplicitMockExpectsCallRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\ClassMethod\\AddDoesNotPerformAssertionToNonAssertingTestRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\ClassMethod\\ExceptionAnnotationRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\FunctionLike\\ExceptionHandlerTypehintRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php71\\Rector\\Assign\\AssignArrayToStringRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\ClassMethod\\FinalPrivateToPrivateVisibilityRector", + "Rector\\Php80\\Rector\\ClassMethod\\SetStateToStaticRector", + "Rector\\Php80\\Rector\\Class_\\AnnotationToAttributeRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Php85\\Rector\\ClassMethod\\NullDebugInfoReturnRector", + "Rector\\Removing\\Rector\\ClassMethod\\ArgumentRemoverRector", + "Rector\\Renaming\\Rector\\Class_\\RenameAttributeRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Symfony\\CodeQuality\\Rector\\ClassMethod\\ParamTypeFromRouteRequiredRegexRector", + "Rector\\Symfony\\CodeQuality\\Rector\\ClassMethod\\ResponseReturnTypeControllerActionRector", + "Rector\\Symfony\\CodeQuality\\Rector\\Class_\\SplitAndSecurityAttributeToIsGrantedRector", + "Rector\\Symfony\\Symfony34\\Rector\\ClassMethod\\RemoveServiceFromSensioRouteRector", + "Rector\\Symfony\\Symfony34\\Rector\\ClassMethod\\ReplaceSensioRouteAnnotationWithSymfonyRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\ClassMethod\\EventDispatcherParentConstructRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony51\\Rector\\ClassMethod\\CommandConstantReturnCodeRector", + "Rector\\Symfony\\Symfony62\\Rector\\ClassMethod\\ParamConverterAttributeToMapEntityAttributeRector", + "Rector\\Symfony\\Symfony62\\Rector\\Class_\\SecurityAttributeToIsGrantedAttributeRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector", + "Rector\\Symfony\\Twig134\\Rector\\Return_\\SimpleFunctionAndFilterRector", + "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\AddParamArrayDocblockFromAssignsParamToParamReferenceRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\AddParamArrayDocblockFromDimFetchAccessRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\AddReturnDocblockForArrayDimAssignedObjectRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\AddReturnDocblockForCommonObjectDenominatorRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\AddReturnDocblockForJsonArrayRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\DocblockReturnArrayFromDirectArrayInstanceRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\NarrowArrayCollectionUnionReturnDocblockRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Property\\MergePhpstanDocTagIntoNativeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamArrayDocblockBasedOnCallableNativeFuncCallRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamStringTypeFromSprintfUseRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeFromPropertyTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnDocblockForScalarArrayFromAssignsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeFromTryCatchTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddVoidReturnTypeWhereNoReturnRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ArrayParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstAndStrictReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanStrictReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NarrowBoolDocblockReturnTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NarrowObjectReturnTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictScalarReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ObjectParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\PrivateMethodReturnTypeFromStrictNewArrayRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNeverTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNullableTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromGetRepositoryDocblockRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromMockObjectRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnCastRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnDirectArrayRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnNewRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictConstantReturnRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictFluentReturnRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictNativeCallRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictNewArrayRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictParamRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictTypedCallRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictTypedPropertyRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromSymfonySerializerRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnUnionTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ScalarParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictArrayParamDimFetchRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictScalarReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictStringReturnsRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\ReturnTypeFromStrictTernaryRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeFromVariableCallRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddParamTypeSplFixedArrayRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddReturnTypeDeclarationFromYieldsRector", + "Rector\\Visibility\\Rector\\ClassMethod\\ChangeMethodVisibilityRector", + "Rector\\Visibility\\Rector\\ClassMethod\\ExplicitPublicClassMethodRector" + ], + "PhpParser\\Node\\Stmt\\Class_": [ + "Rector\\Arguments\\Rector\\ClassMethod\\ArgumentAdderRector", + "Rector\\CodeQuality\\Rector\\ClassMethod\\LocallyCalledStaticMethodToNonStaticRector", + "Rector\\CodeQuality\\Rector\\Class_\\CompleteDynamicPropertiesRector", + "Rector\\CodeQuality\\Rector\\Class_\\ConvertStaticToSelfRector", + "Rector\\CodeQuality\\Rector\\Class_\\InlineConstructorDefaultToPropertyRector", + "Rector\\CodeQuality\\Rector\\Class_\\InnerFunctionToPrivateMethodRector", + "Rector\\CodeQuality\\Rector\\Class_\\RemoveReadonlyPropertyVisibilityOnReadonlyClassRector", + "Rector\\CodeQuality\\Rector\\Class_\\ReturnIteratorInDataProviderRector", + "Rector\\CodeQuality\\Rector\\New_\\NewStaticToNewSelfRector", + "Rector\\CodingStyle\\Rector\\ClassConst\\RemoveFinalFromConstRector", + "Rector\\CodingStyle\\Rector\\ClassLike\\NewlineBetweenClassLikeStmtsRector", + "Rector\\CodingStyle\\Rector\\ClassMethod\\MakeInheritedMethodVisibilitySameAsParentRector", + "Rector\\CodingStyle\\Rector\\Use_\\SeparateMultiUseImportsRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveArgumentFromDefaultParentCallRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveEmptyClassMethodRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveTestsOverriddenPrivateMethodParameterRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedConstructorParamRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodParameterRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPromotedPropertyRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPublicMethodParameterRector", + "Rector\\DeadCode\\Rector\\Class_\\RemoveRefactorDuplicatedNodeInstanceCheckRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveTypedPropertyDeadInstanceOfRector", + "Rector\\DeadCode\\Rector\\Property\\RemoveDefaultValueFromAssignedPropertyRector", + "Rector\\DeadCode\\Rector\\Property\\RemoveUnusedPrivatePropertyRector", + "Rector\\DeadCode\\Rector\\Property\\RemoveUselessReadOnlyTagRector", + "Rector\\DeadCode\\Rector\\StaticCall\\RemoveParentCallWithoutParentRector", + "Rector\\Doctrine\\Bundle210\\Rector\\Class_\\EventSubscriberInterfaceToAttributeRector", + "Rector\\Doctrine\\Bundle230\\Rector\\Class_\\AddAnnotationToRepositoryRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Class_\\CompleteParamDocblockFromSetterToCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Class_\\CompletePropertyDocblockFromToManyRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Class_\\CompleteReturnDocblockFromToManyRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Class_\\InitializeCollectionInConstructorRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Class_\\RemoveNullFromInstantiatedArrayCollectionPropertyRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Property\\NarrowPropertyUnionToCollectionRector", + "Rector\\Naming\\Rector\\Class_\\RenamePropertyToMatchTypeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DependsAnnotationWithValueToAttributeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\AnnotationWithValueToAttributeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\CoversAnnotationWithValueToAttributeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\RequiresAnnotationWithValueToAttributeRector", + "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\TicketAnnotationToAttributeRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddIntersectionParamToMockObjectParamRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddIntersectionVarToMockObjectPropertyRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddParamTypeFromDependsRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddReturnTypeToDependedRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddSeeTestAnnotationRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\AddStubIntersectionVarToStubPropertyRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\ConstructClassMethodToSetUpTestCaseRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\InlineStubPropertyToCreateStubMethodCallRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\NarrowUnusedSetUpDefinedPropertyRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\PreferPHPUnitSelfCallRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\PreferPHPUnitThisCallRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\PreferTestsWithCamelCaseRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\PreferTestsWithSnakeCaseRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\RemoveNeverUsedMockPropertyRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\SingleMockPropertyTypeRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\SuffixMockObjectPropertyRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\TestWithToDataProviderRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\TypeWillReturnCallableArrowFunctionRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\VoidMethodWithCallbackToWillReturnCallbackRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Class_\\YieldDataProviderRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\FuncCall\\AssertFuncCallToPHPUnitAssertRector", + "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\AddProphecyTraitRector", + "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\ParentTestClassConstructorRector", + "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\PublicDataProviderClassMethodRector", + "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\RemoveNamedArgsInDataProviderRector", + "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\StaticDataProviderClassMethodRector", + "Rector\\PHPUnit\\PHPUnit110\\Rector\\Class_\\NamedArgumentForDataProviderRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\Class_\\AllowMockObjectsForDataProviderRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\Class_\\AllowMockObjectsWhereParentClassRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\Class_\\PropertyCreateMockToCreateStubRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\Class_\\RemoveOverrideFinalConstructTestCaseRector", + "Rector\\PHPUnit\\PHPUnit70\\Rector\\Class_\\RemoveDataProviderTestPrefixRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\Class_\\TestListenerToHooksRector", + "Rector\\Php55\\Rector\\ClassConstFetch\\StaticToSelfOnFinalClassRector", + "Rector\\Php70\\Rector\\ClassMethod\\Php4ConstructorRector", + "Rector\\Php70\\Rector\\MethodCall\\ThisCallOnStaticMethodToStaticCallRector", + "Rector\\Php71\\Rector\\Assign\\AssignArrayToStringRector", + "Rector\\Php72\\Rector\\FuncCall\\GetClassOnNullRector", + "Rector\\Php74\\Rector\\Property\\RestoreDefaultNullToNullableTypePropertyRector", + "Rector\\Php80\\Rector\\ClassConstFetch\\ClassOnThisVariableObjectRector", + "Rector\\Php80\\Rector\\ClassMethod\\AddParamBasedOnParentClassMethodRector", + "Rector\\Php80\\Rector\\Class_\\AnnotationToAttributeRector", + "Rector\\Php80\\Rector\\Class_\\ClassPropertyAssignToConstructorPromotionRector", + "Rector\\Php80\\Rector\\Class_\\StringableForToStringRector", + "Rector\\Php80\\Rector\\Property\\NestedAnnotationToAttributeRector", + "Rector\\Php81\\Rector\\Class_\\MyCLabsClassToEnumRector", + "Rector\\Php81\\Rector\\Class_\\SpatieEnumClassToEnumRector", + "Rector\\Php81\\Rector\\Property\\ReadOnlyPropertyRector", + "Rector\\Php82\\Rector\\Class_\\ReadOnlyClassRector", + "Rector\\Php83\\Rector\\ClassConst\\AddTypeToConstRector", + "Rector\\Php83\\Rector\\ClassMethod\\AddOverrideAttributeToOverriddenMethodsRector", + "Rector\\Php83\\Rector\\Class_\\ReadOnlyAnonymousClassRector", + "Rector\\Php85\\Rector\\Class_\\SleepToSerializeRector", + "Rector\\Php85\\Rector\\Class_\\WakeupToUnserializeRector", + "Rector\\Php85\\Rector\\Property\\AddOverrideAttributeToOverriddenPropertiesRector", + "Rector\\Php86\\Rector\\Class_\\ConstructorReadonlyAssignToDefaultRector", + "Rector\\Privatization\\Rector\\ClassConst\\PrivatizeFinalClassConstantRector", + "Rector\\Privatization\\Rector\\ClassMethod\\PrivatizeFinalClassMethodRector", + "Rector\\Privatization\\Rector\\Class_\\FinalizeTestCaseClassRector", + "Rector\\Privatization\\Rector\\MethodCall\\PrivatizeLocalGetterToPropertyRector", + "Rector\\Privatization\\Rector\\Property\\PrivatizeFinalClassPropertyRector", + "Rector\\Removing\\Rector\\Class_\\RemoveInterfacesRector", + "Rector\\Removing\\Rector\\Class_\\RemoveTraitUseRector", + "Rector\\Renaming\\Rector\\ClassMethod\\RenameAnnotationRector", + "Rector\\Renaming\\Rector\\Class_\\RenameAttributeRector", + "Rector\\Renaming\\Rector\\MethodCall\\RenameMethodRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Renaming\\Rector\\PropertyFetch\\RenamePropertyRector", + "Rector\\Symfony\\CodeQuality\\Rector\\ClassMethod\\RemoveUnusedRequestParamRector", + "Rector\\Symfony\\CodeQuality\\Rector\\Class_\\EventListenerToEventSubscriberRector", + "Rector\\Symfony\\CodeQuality\\Rector\\Class_\\EventSubscriberMethodReturnVoidRector", + "Rector\\Symfony\\CodeQuality\\Rector\\Class_\\LoadValidatorMetadataToAttributeRector", + "Rector\\Symfony\\CodeQuality\\Rector\\Class_\\SplitAndSecurityAttributeToIsGrantedRector", + "Rector\\Symfony\\DependencyInjection\\Rector\\Class_\\CommandGetByTypeToConstructorInjectionRector", + "Rector\\Symfony\\DependencyInjection\\Rector\\Class_\\ControllerGetByTypeToConstructorInjectionRector", + "Rector\\Symfony\\DependencyInjection\\Rector\\Class_\\GetBySymfonyStringToConstructorInjectionRector", + "Rector\\Symfony\\DowngradeSymfony70\\Rector\\Class_\\DowngradeSymfonyCommandAttributeRector", + "Rector\\Symfony\\JMS\\Rector\\Class_\\AccessTypeAnnotationToAttributeRector", + "Rector\\Symfony\\Symfony28\\Rector\\MethodCall\\GetToConstructorInjectionRector", + "Rector\\Symfony\\Symfony30\\Rector\\ClassMethod\\FormTypeGetParentRector", + "Rector\\Symfony\\Symfony30\\Rector\\ClassMethod\\GetRequestRector", + "Rector\\Symfony\\Symfony34\\Rector\\ClassMethod\\MergeMethodAnnotationToRouteAnnotationRector", + "Rector\\Symfony\\Symfony34\\Rector\\ClassMethod\\RemoveServiceFromSensioRouteRector", + "Rector\\Symfony\\Symfony34\\Rector\\ClassMethod\\ReplaceSensioRouteAnnotationWithSymfonyRector", + "Rector\\Symfony\\Symfony44\\Rector\\ClassMethod\\ConsoleExecuteReturnIntRector", + "Rector\\Symfony\\Symfony51\\Rector\\ClassMethod\\RouteCollectionBuilderToRoutingConfiguratorRector", + "Rector\\Symfony\\Symfony51\\Rector\\Class_\\LogoutHandlerToLogoutEventSubscriberRector", + "Rector\\Symfony\\Symfony51\\Rector\\Class_\\LogoutSuccessHandlerToLogoutEventSubscriberRector", + "Rector\\Symfony\\Symfony60\\Rector\\MethodCall\\GetHelperControllerToServiceRector", + "Rector\\Symfony\\Symfony61\\Rector\\Class_\\CommandConfigureToAttributeRector", + "Rector\\Symfony\\Symfony61\\Rector\\Class_\\CommandPropertyToAttributeRector", + "Rector\\Symfony\\Symfony61\\Rector\\Class_\\MagicClosureTwigExtensionToNativeMethodsRector", + "Rector\\Symfony\\Symfony61\\Rector\\StaticPropertyFetch\\ErrorNamesPropertyToConstantRector", + "Rector\\Symfony\\Symfony62\\Rector\\ClassMethod\\ClassMethod\\ArgumentValueResolverToValueResolverRector", + "Rector\\Symfony\\Symfony62\\Rector\\Class_\\MessageHandlerInterfaceToAttributeRector", + "Rector\\Symfony\\Symfony62\\Rector\\Class_\\MessageSubscriberInterfaceToAttributeRector", + "Rector\\Symfony\\Symfony62\\Rector\\Class_\\SecurityAttributeToIsGrantedAttributeRector", + "Rector\\Symfony\\Symfony63\\Rector\\Class_\\ParamAndEnvAttributeRector", + "Rector\\Symfony\\Symfony63\\Rector\\Class_\\SignalableCommandInterfaceReturnTypeRector", + "Rector\\Symfony\\Symfony73\\Rector\\Class_\\AddVoteArgumentToVoteOnAttributeRector", + "Rector\\Symfony\\Symfony73\\Rector\\Class_\\AuthorizationCheckerToAccessDecisionManagerInVoterRector", + "Rector\\Symfony\\Symfony73\\Rector\\Class_\\CommandDefaultNameAndDescriptionToAsCommandAttributeRector", + "Rector\\Symfony\\Symfony73\\Rector\\Class_\\CommandHelpToAttributeRector", + "Rector\\Symfony\\Symfony73\\Rector\\Class_\\GetFiltersAndFunctionsToAsTwigAttributeRector", + "Rector\\Symfony\\Symfony73\\Rector\\Class_\\InvokableCommandInputAttributeRector", + "Rector\\Symfony\\Symfony80\\Rector\\Class_\\RemoveEraseCredentialsRector", + "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", + "Rector\\Transform\\Rector\\ClassMethod\\WrapReturnRector", + "Rector\\Transform\\Rector\\Class_\\MergeInterfacesRector", + "Rector\\Transform\\Rector\\StaticCall\\StaticCallToMethodCallRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\DocblockGetterReturnArrayFromPropertyDocblockVarRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Class_\\AddParamTypeToRefactorMethodRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Class_\\AddVarArrayDocblockFromDimFetchAssignRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Class_\\ClassMethodArrayDocblockParamFromLocalCallsRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Class_\\DocblockVarArrayFromGetterReturnRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Class_\\DocblockVarArrayFromPropertyDefaultsRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Class_\\DocblockVarFromParamDocblockInConstructorRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddMethodCallBasedStrictParamTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamFromDimFetchKeyUseRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeBasedOnPHPUnitDataProviderRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeDeclarationRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeDeclarationBasedOnParentClassMethodRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeDeclarationRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\KnownMagicClassMethodTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByParentCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\AddTestsVoidReturnTypeWhereNoReturnRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\ChildDoctrineRepositoryClassTypeRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\MergeDateTimePropertyTypeDeclarationRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\ObjectTypedPropertyFromJMSSerializerAttributeTypeRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\PropertyTypeFromStrictSetterGetterRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\ScalarTypedPropertyFromJMSSerializerAttributeTypeRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\TypedPropertyFromContainerGetSetUpRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\TypedPropertyFromCreateMockAssignRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\TypedPropertyFromDocblockSetUpDefinedRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\TypedPropertyFromGetRepositorySetUpRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\TypedStaticPropertyInBehatContextRector", + "Rector\\TypeDeclaration\\Rector\\Property\\TypedPropertyFromAssignsRector", + "Rector\\TypeDeclaration\\Rector\\Property\\TypedPropertyFromStrictConstructorRector", + "Rector\\TypeDeclaration\\Rector\\Property\\TypedPropertyFromStrictSetUpRector", + "Rector\\Visibility\\Rector\\ClassConst\\ChangeConstantVisibilityRector" + ], + "PhpParser\\Node\\Stmt\\Const_": [], + "PhpParser\\Node\\Stmt\\Continue_": [ + "Rector\\Php54\\Rector\\Break_\\RemoveZeroBreakContinueRector" + ], + "PhpParser\\Node\\Stmt\\Declare_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\Do_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadContinueRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadLoopRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector", + "Rector\\TypeDeclaration\\Rector\\While_\\WhileNullableToInstanceofRector" + ], + "PhpParser\\Node\\Stmt\\Echo_": [], + "PhpParser\\Node\\Stmt\\ElseIf_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ArrayExplicitBoolCompareRector", + "Rector\\CodeQuality\\Rector\\If_\\CompleteMissingIfElseBracketRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\ObjectExplicitBoolCompareRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\Else_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\CompleteMissingIfElseBracketRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\EnumCase": [], + "PhpParser\\Node\\Stmt\\Enum_": [ + "Rector\\CodingStyle\\Rector\\ClassLike\\NewlineBetweenClassLikeStmtsRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Renaming\\Rector\\PropertyFetch\\RenamePropertyRector", + "Rector\\Symfony\\Symfony34\\Rector\\ClassMethod\\MergeMethodAnnotationToRouteAnnotationRector" + ], + "PhpParser\\Node\\Stmt\\Expression": [ + "Rector\\CodeQuality\\Rector\\Expression\\InlineIfToExplicitIfRector", + "Rector\\CodeQuality\\Rector\\Expression\\TernaryFalseExpressionToIfRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\ChangeArrayPushToArrayAssignRector", + "Rector\\CodeQuality\\Rector\\FuncCall\\SetTypeToCastRector", + "Rector\\CodeQuality\\Rector\\LogicalAnd\\AndAssignsToSeparateLinesRector", + "Rector\\CodeQuality\\Rector\\Property\\FixClassCaseSensitivityVarDocblockRector", + "Rector\\CodingStyle\\Rector\\Assign\\SplitDoubleAssignRector", + "Rector\\CodingStyle\\Rector\\PostInc\\PostIncDecToPreIncDecRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveNullTagValueNodeRector", + "Rector\\DeadCode\\Rector\\Expression\\RemoveDeadStmtRector", + "Rector\\DeadCode\\Rector\\Expression\\SimplifyMirrorAssignRector", + "Rector\\DeadCode\\Rector\\Property\\RemoveUselessVarTagRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Expression\\RemoveAssertNotNullOnCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Expression\\RemoveCoalesceAssignOnCollectionRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Expression\\AssertArrayCastedObjectToAssertSameRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Expression\\ConfiguredMockEntityToSetterObjectRector", + "Rector\\PHPUnit\\PHPUnit100\\Rector\\StmtsAwareInterface\\WithConsecutiveRector", + "Rector\\Php72\\Rector\\Assign\\ListEachRector", + "Rector\\Php72\\Rector\\Assign\\ReplaceEachAssignmentWithKeyCurrentRector", + "Rector\\Php72\\Rector\\Unset_\\UnsetCastRector", + "Rector\\Php81\\Rector\\MethodCall\\RemoveReflectionSetAccessibleCallsRector", + "Rector\\Removing\\Rector\\FuncCall\\RemoveFuncCallRector", + "Rector\\Renaming\\Rector\\ClassMethod\\RenameAnnotationRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector" + ], + "PhpParser\\Node\\Stmt\\Finally_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\For_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\For_\\ForRepeatedCountToOwnVariableRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\PostInc\\PostIncDecToPreIncDecRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadContinueRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadLoopRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\Foreach_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadContinueRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadLoopRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\Doctrine\\Orm28\\Rector\\MethodCall\\IterateToToIterableRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddInstanceofAssertForNullableArgumentRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddInstanceofAssertForNullableInstanceRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\BareCreateMockAssignToDirectUseRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachInstanceOfRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php71\\Rector\\List_\\ListToArrayDestructRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\Function_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\ExplicitReturnNullRector", + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\ClassMethod\\OptionalParametersAfterRequiredRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Catch_\\CatchExceptionNameMatchingTypeRector", + "Rector\\CodingStyle\\Rector\\ClassMethod\\FuncGetArgsToVariadicParamRector", + "Rector\\CodingStyle\\Rector\\ClassMethod\\NewlineBeforeNewAssignSetRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveUnusedVariableAssignRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveMixedDocblockOverruledByNativeTypeRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveNullTagValueNodeRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveReturnTagIncompatibleWithNativeTypeRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessParamTagRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessReturnTagRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUselessUnionReturnDocblockRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\FunctionLike\\NarrowWideUnionReturnTypeRector", + "Rector\\DeadCode\\Rector\\FunctionLike\\RemoveDeadReturnRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Assign\\RenameVariableToMatchMethodCallReturnTypeRector", + "Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchMethodCallReturnTypeRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\FunctionLike\\ExceptionHandlerTypehintRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php71\\Rector\\Assign\\AssignArrayToStringRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Class_\\AnnotationToAttributeRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector", + "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\AddParamArrayDocblockFromDimFetchAccessRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\AddReturnDocblockForArrayDimAssignedObjectRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\AddReturnDocblockForCommonObjectDenominatorRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\AddReturnDocblockForJsonArrayRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\DocblockReturnArrayFromDirectArrayInstanceRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\ClassMethod\\NarrowArrayCollectionUnionReturnDocblockRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Property\\MergePhpstanDocTagIntoNativeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamArrayDocblockBasedOnCallableNativeFuncCallRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamStringTypeFromSprintfUseRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnDocblockForScalarArrayFromAssignsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ArrayParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstAndStrictReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanStrictReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NarrowBoolDocblockReturnTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictScalarReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ObjectParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNeverTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNullableTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnCastRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnDirectArrayRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnNewRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictNativeCallRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictNewArrayRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictParamRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictTypedCallRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnUnionTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ScalarParamTypeByMethodCallTypeRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictArrayParamDimFetchRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictScalarReturnsRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictStringReturnsRector", + "Rector\\TypeDeclaration\\Rector\\Class_\\ReturnTypeFromStrictTernaryRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddClosureParamTypeFromVariableCallRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddParamTypeSplFixedArrayRector", + "Rector\\TypeDeclaration\\Rector\\FunctionLike\\AddReturnTypeDeclarationFromYieldsRector", + "Rector\\TypeDeclaration\\Rector\\Function_\\AddFunctionVoidReturnTypeWhereNoReturnRector" + ], + "PhpParser\\Node\\Stmt\\Global_": [], + "PhpParser\\Node\\Stmt\\Goto_": [], + "PhpParser\\Node\\Stmt\\GroupUse": [], + "PhpParser\\Node\\Stmt\\HaltCompiler": [], + "PhpParser\\Node\\Stmt\\If_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ArrayExplicitBoolCompareRector", + "Rector\\CodeQuality\\Rector\\If_\\CompleteMissingIfElseBracketRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\ObjectExplicitBoolCompareRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\If_\\AlternativeIfToBracketRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\ConstFetch\\RemovePhpVersionIdCheckRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\ReduceAlwaysFalseIfOrRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveAlwaysTrueIfConditionRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveDeadIfBlockRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveDeadInstanceOfRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\If_\\SimplifyIfElseWithSameContentRector", + "Rector\\DeadCode\\Rector\\If_\\UnwrapFutureCompatibleIfPhpVersionRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\If_\\RemoveIfCollectionIdenticalToNullRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\If_\\RemoveIfInstanceofCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\If_\\RemoveIsArrayOnCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\If_\\RemoveUselessIsEmptyAssignRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\If_\\RemoveAlwaysElseRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php74\\Rector\\If_\\IfToNullCoalescingAssignRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Symfony\\Symfony40\\Rector\\MethodCall\\FormIsValidRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\InlineHTML": [], + "PhpParser\\Node\\Stmt\\Interface_": [ + "Rector\\CodingStyle\\Rector\\ClassLike\\NewlineBetweenClassLikeStmtsRector", + "Rector\\Php80\\Rector\\Class_\\AnnotationToAttributeRector", + "Rector\\Removing\\Rector\\Class_\\RemoveInterfacesRector", + "Rector\\Renaming\\Rector\\MethodCall\\RenameMethodRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Renaming\\Rector\\PropertyFetch\\RenamePropertyRector", + "Rector\\Symfony\\Symfony34\\Rector\\ClassMethod\\MergeMethodAnnotationToRouteAnnotationRector", + "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeDeclarationRector", + "Rector\\Visibility\\Rector\\ClassConst\\ChangeConstantVisibilityRector" + ], + "PhpParser\\Node\\Stmt\\Label": [], + "PhpParser\\Node\\Stmt\\Namespace_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Catch_\\CatchExceptionNameMatchingTypeRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\CodingStyle\\Rector\\Stmt\\RemoveUselessAliasInUseStatementRector", + "Rector\\CodingStyle\\Rector\\Use_\\SeparateMultiUseImportsRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php71\\Rector\\Assign\\AssignArrayToStringRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\Nop": [], + "PhpParser\\Node\\Stmt\\Property": [ + "Rector\\CodeQuality\\Rector\\Property\\FixClassCaseSensitivityVarDocblockRector", + "Rector\\CodingStyle\\Rector\\Property\\SplitGroupedPropertiesRector", + "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveNullTagValueNodeRector", + "Rector\\DeadCode\\Rector\\PropertyProperty\\RemoveNullPropertyInitializationRector", + "Rector\\DeadCode\\Rector\\Property\\RemoveUselessReadOnlyTagRector", + "Rector\\DeadCode\\Rector\\Property\\RemoveUselessVarTagRector", + "Rector\\Doctrine\\CodeQuality\\Rector\\Property\\CorrectDefaultTypesOnEntityPropertyRector", + "Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromColumnTypeRector", + "Rector\\Doctrine\\CodeQuality\\Rector\\Property\\TypedPropertyFromToOneRelationTypeRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\NarrowArrayCollectionToCollectionRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\ClassMethod\\RemoveNullFromNullableCollectionTypeRector", + "Rector\\Doctrine\\TypedCollections\\Rector\\Property\\TypedPropertyFromToManyRelationTypeRector", + "Rector\\PHPUnit\\PHPUnit120\\Rector\\Property\\MockObjectVarToStubRector", + "Rector\\Php52\\Rector\\Property\\VarToPublicPropertyRector", + "Rector\\Php80\\Rector\\Class_\\AnnotationToAttributeRector", + "Rector\\Php80\\Rector\\Property\\NestedAnnotationToAttributeRector", + "Rector\\Renaming\\Rector\\Class_\\RenameAttributeRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Symfony\\JMS\\Rector\\Class_\\AccessTypeAnnotationToAttributeRector", + "Rector\\Symfony\\JMS\\Rector\\Property\\AccessorAnnotationToAttributeRector", + "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", + "Rector\\TypeDeclarationDocblocks\\Rector\\Property\\MergePhpstanDocTagIntoNativeRector", + "Rector\\TypeDeclaration\\Rector\\Property\\AddPropertyTypeDeclarationRector" + ], + "PhpParser\\Node\\Stmt\\Return_": [ + "Rector\\PHPUnit\\CodeQuality\\Rector\\Expression\\ConfiguredMockEntityToSetterObjectRector" + ], + "PhpParser\\Node\\Stmt\\Static_": [], + "PhpParser\\Node\\Stmt\\Switch_": [ + "Rector\\CodeQuality\\Rector\\Switch_\\SingularSwitchToIfRector", + "Rector\\CodeQuality\\Rector\\Switch_\\SwitchTrueToMatchRector", + "Rector\\DeadCode\\Rector\\Switch_\\RemoveDuplicatedCaseInSwitchRector", + "Rector\\Php52\\Rector\\Switch_\\ContinueToBreakInSwitchRector", + "Rector\\Php70\\Rector\\Switch_\\ReduceMultipleDefaultSwitchRector", + "Rector\\Php85\\Rector\\Switch_\\ColonAfterSwitchCaseRector" + ], + "PhpParser\\Node\\Stmt\\TraitUse": [], + "PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias": [], + "PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence": [], + "PhpParser\\Node\\Stmt\\Trait_": [ + "Rector\\CodingStyle\\Rector\\ClassLike\\NewlineBetweenClassLikeStmtsRector", + "Rector\\Removing\\Rector\\Class_\\RemoveTraitUseRector", + "Rector\\Renaming\\Rector\\MethodCall\\RenameMethodRector", + "Rector\\Renaming\\Rector\\Name\\RenameClassRector", + "Rector\\Renaming\\Rector\\PropertyFetch\\RenamePropertyRector", + "Rector\\Symfony\\Symfony34\\Rector\\ClassMethod\\MergeMethodAnnotationToRouteAnnotationRector" + ], + "PhpParser\\Node\\Stmt\\TryCatch": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\DeadCode\\Rector\\TryCatch\\RemoveDeadCatchRector", + "Rector\\DeadCode\\Rector\\TryCatch\\RemoveDeadTryCatchRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php71\\Rector\\TryCatch\\MultiExceptionCatchRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector" + ], + "PhpParser\\Node\\Stmt\\Unset_": [ + "Rector\\Transform\\Rector\\ArrayDimFetch\\ArrayDimFetchToMethodCallRector" + ], + "PhpParser\\Node\\Stmt\\Use_": [], + "PhpParser\\Node\\Stmt\\While_": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadContinueRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadLoopRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php72\\Rector\\While_\\WhileEachToForeachRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector", + "Rector\\TypeDeclaration\\Rector\\While_\\WhileNullableToInstanceofRector" + ], + "PhpParser\\Node\\UnionType": [], + "PhpParser\\Node\\UseItem": [], + "PhpParser\\Node\\VarLikeIdentifier": [], + "PhpParser\\Node\\VariadicPlaceholder": [], + "Rector\\PhpParser\\Node\\FileNode": [ + "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", + "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", + "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", + "Rector\\CodeQuality\\Rector\\If_\\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNotNullReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", + "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", + "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", + "Rector\\CodingStyle\\Rector\\Catch_\\CatchExceptionNameMatchingTypeRector", + "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", + "Rector\\CodingStyle\\Rector\\Stmt\\RemoveUselessAliasInUseStatementRector", + "Rector\\CodingStyle\\Rector\\Use_\\SeparateMultiUseImportsRector", + "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", + "Rector\\DeadCode\\Rector\\For_\\RemoveDeadIfForeachForRector", + "Rector\\DeadCode\\Rector\\Foreach_\\RemoveUnusedForeachKeyRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveOverriddenAssignBeforeIfElseRector", + "Rector\\DeadCode\\Rector\\If_\\RemoveUnusedNonEmptyArrayBeforeForeachRector", + "Rector\\DeadCode\\Rector\\Node\\RemoveNonExistingVarAnnotationRector", + "Rector\\DeadCode\\Rector\\Return_\\RemoveDeadConditionAboveReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveConditionExactReturnRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveNextSameValueConditionRector", + "Rector\\DeadCode\\Rector\\Stmt\\RemoveUnreachableStatementRector", + "Rector\\DeadCode\\Rector\\StmtsAwareInterface\\RemoveDeadInstanceOfAssertRector", + "Rector\\Doctrine\\Dbal40\\Rector\\StmtsAwareInterface\\ExecuteQueryParamsToBindValueRector", + "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", + "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", + "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\StmtsAwareInterface\\DeclareStrictTypesTestsRector", + "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", + "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", + "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", + "Rector\\Php70\\Rector\\StmtsAwareInterface\\IfIssetToCoalescingRector", + "Rector\\Php71\\Rector\\Assign\\AssignArrayToStringRector", + "Rector\\Php72\\Rector\\FuncCall\\ParseStrWithResultArgumentRector", + "Rector\\Php73\\Rector\\FuncCall\\ArrayKeyFirstLastRector", + "Rector\\Php80\\Rector\\Catch_\\RemoveUnusedVariableInCatchRector", + "Rector\\Php80\\Rector\\Switch_\\ChangeSwitchToMatchRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAllRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayAnyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindKeyRector", + "Rector\\Php84\\Rector\\Foreach_\\ForeachToArrayFindRector", + "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", + "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", + "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector", + "Rector\\TypeDeclaration\\Rector\\StmtsAwareInterface\\DeclareStrictTypesRector", + "Rector\\TypeDeclaration\\Rector\\StmtsAwareInterface\\SafeDeclareStrictTypesRector" + ] +} diff --git a/ecs.php b/ecs.php index 45bd97c9c41..dd212503947 100644 --- a/ecs.php +++ b/ecs.php @@ -19,6 +19,7 @@ __DIR__ . '/config', __DIR__ . '/scripts', __DIR__ . '/build/build-preload.php', + __DIR__ . '/build/build-node-rule-map.php', ]) ->withSkip([ '*/Source/*', diff --git a/src/PhpParser/NodeTraverser/RectorNodeTraverser.php b/src/PhpParser/NodeTraverser/RectorNodeTraverser.php index 4b99a11fb42..0a889a0cce8 100644 --- a/src/PhpParser/NodeTraverser/RectorNodeTraverser.php +++ b/src/PhpParser/NodeTraverser/RectorNodeTraverser.php @@ -5,6 +5,8 @@ namespace Rector\PhpParser\NodeTraverser; use LogicException; +use Nette\Utils\FileSystem; +use Nette\Utils\Json; use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Stmt; @@ -45,6 +47,28 @@ final class RectorNodeTraverser implements NodeTraverserInterface */ private array $visitorsPerNodeClass = []; + /** + * Static precomputed node-class to rule map, shipped with the package. + * @var array, array>> + */ + private array $nodeRuleMap = []; + + /** + * @var array, RectorInterface> + */ + private array $visitorByClass = []; + + /** + * @var array, int> + */ + private array $visitorPositionByClass = []; + + /** + * Active rules missing from the static map, e.g. third-party rules. + * @var array + */ + private array $unknownVisitors = []; + /** * @param RectorInterface[] $rectors */ @@ -108,21 +132,47 @@ public function getVisitorsForNode(Node $node): array { $nodeClass = $node::class; - if (! isset($this->visitorsPerNodeClass[$nodeClass])) { - $this->visitorsPerNodeClass[$nodeClass] = []; + if (isset($this->visitorsPerNodeClass[$nodeClass])) { + return $this->visitorsPerNodeClass[$nodeClass]; + } - /** @var RectorInterface $visitor */ - foreach ($this->visitors as $visitor) { - foreach ($visitor->getNodeTypes() as $nodeType) { - if (is_a($nodeClass, $nodeType, true)) { - $this->visitorsPerNodeClass[$nodeClass][] = $visitor; - continue 2; - } + $visitorsByPosition = []; + + if (array_key_exists($nodeClass, $this->nodeRuleMap)) { + // O(1) lookup in the static map, then keep only the active rules + foreach ($this->nodeRuleMap[$nodeClass] as $ruleClass) { + if (isset($this->visitorByClass[$ruleClass])) { + $visitorsByPosition[$this->visitorPositionByClass[$ruleClass]] = $this->visitorByClass[$ruleClass]; + } + } + + // resolve rules missing from the static map, e.g. third-party rules + foreach ($this->unknownVisitors as $position => $visitor) { + if ($this->isVisitorForNodeClass($visitor, $nodeClass)) { + $visitorsByPosition[$position] = $visitor; + } + } + } else { + // node class missing from the static map, resolve against all active rules + foreach ($this->visitors as $position => $visitor) { + if ($this->isVisitorForNodeClass($visitor, $nodeClass)) { + $visitorsByPosition[$position] = $visitor; } } } - return $this->visitorsPerNodeClass[$nodeClass]; + // keep the original rule registration order + ksort($visitorsByPosition); + + return $this->visitorsPerNodeClass[$nodeClass] = array_values($visitorsByPosition); + } + + /** + * @param class-string $nodeClass + */ + private function isVisitorForNodeClass(RectorInterface $rector, string $nodeClass): bool + { + return array_any($rector->getNodeTypes(), fn(string $nodeType): bool => is_a($nodeClass, $nodeType, true)); } private function traverseNode(Node $node): void @@ -276,6 +326,54 @@ private function prepareNodeVisitors(): void // filter by configuration $this->visitors = $this->configurationRuleFilter->filter($this->visitors); + $this->prepareNodeRuleMap(); + $this->areNodeVisitorsPrepared = true; } + + private function prepareNodeRuleMap(): void + { + $this->nodeRuleMap = $this->loadNodeRuleMap(); + + $knownRuleClasses = []; + foreach ($this->nodeRuleMap as $ruleClasses) { + foreach ($ruleClasses as $ruleClass) { + $knownRuleClasses[$ruleClass] = true; + } + } + + $this->visitorByClass = []; + $this->visitorPositionByClass = []; + $this->unknownVisitors = []; + + foreach ($this->visitors as $position => $visitor) { + $visitorClass = $visitor::class; + + $this->visitorByClass[$visitorClass] = $visitor; + $this->visitorPositionByClass[$visitorClass] = $position; + + if (! isset($knownRuleClasses[$visitorClass])) { + $this->unknownVisitors[$position] = $visitor; + } + } + } + + /** + * @return array, array>> + */ + private function loadNodeRuleMap(): array + { + $nodeRuleMapFilePath = __DIR__ . '/../../../config/node-rule-map.json'; + if (! file_exists($nodeRuleMapFilePath)) { + return []; + } + + $nodeRuleMap = Json::decode(FileSystem::read($nodeRuleMapFilePath), true); + if (! is_array($nodeRuleMap)) { + return []; + } + + /** @var array, array>> $nodeRuleMap */ + return $nodeRuleMap; + } } diff --git a/tests/PhpParser/NodeTraverser/RectorNodeTraverserTest.php b/tests/PhpParser/NodeTraverser/RectorNodeTraverserTest.php index d7e9208ae7d..5ec965b63e0 100644 --- a/tests/PhpParser/NodeTraverser/RectorNodeTraverserTest.php +++ b/tests/PhpParser/NodeTraverser/RectorNodeTraverserTest.php @@ -4,7 +4,11 @@ namespace Rector\Tests\PhpParser\NodeTraverser; +use PhpParser\Node\Expr\ConstFetch; +use PhpParser\Node\Expr\Ternary; +use PhpParser\Node\Name; use PhpParser\Node\Stmt\Class_; +use Rector\CodeQuality\Rector\Ternary\UnnecessaryTernaryExpressionRector; use Rector\PhpParser\NodeTraverser\RectorNodeTraverser; use Rector\Testing\PHPUnit\AbstractLazyTestCase; use Rector\Tests\PhpParser\NodeTraverser\Class_\RuleUsingClassRector; @@ -80,4 +84,15 @@ public function testGetVisitorsForNodeWhenAllVisitorsMatch(): void $this->assertEquals([$this->ruleUsingClassRector, $this->ruleUsingClassLikeRector], $visitors); } + + public function testGetVisitorsForNodeResolvesCoreRuleFromStaticMap(): void + { + $unnecessaryTernaryExpressionRector = $this->make(UnnecessaryTernaryExpressionRector::class); + $this->rectorNodeTraverser->refreshPhpRectors([$unnecessaryTernaryExpressionRector]); + + $ternary = new Ternary(new ConstFetch(new Name('true')), null, new ConstFetch(new Name('false'))); + $visitors = $this->rectorNodeTraverser->getVisitorsForNode($ternary); + + $this->assertSame([$unnecessaryTernaryExpressionRector], $visitors); + } } From 9edf6200ce130089a6b8b91e3091c721f870c8eb Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 8 Oct 2026 19:32:19 +0200 Subject: [PATCH 2/6] [Performance] Cache decoded node-rule map across instances The static map file is immutable, decode it once instead of on every prepareNodeVisitors() / refreshPhpRectors(). --- .../NodeTraverser/RectorNodeTraverser.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/PhpParser/NodeTraverser/RectorNodeTraverser.php b/src/PhpParser/NodeTraverser/RectorNodeTraverser.php index 0a889a0cce8..9c12a76e989 100644 --- a/src/PhpParser/NodeTraverser/RectorNodeTraverser.php +++ b/src/PhpParser/NodeTraverser/RectorNodeTraverser.php @@ -69,6 +69,12 @@ final class RectorNodeTraverser implements NodeTraverserInterface */ private array $unknownVisitors = []; + /** + * Shared across instances, the static map file is immutable. + * @var array, array>>|null + */ + private static ?array $cachedNodeRuleMap = null; + /** * @param RectorInterface[] $rectors */ @@ -363,17 +369,21 @@ private function prepareNodeRuleMap(): void */ private function loadNodeRuleMap(): array { + if (self::$cachedNodeRuleMap !== null) { + return self::$cachedNodeRuleMap; + } + $nodeRuleMapFilePath = __DIR__ . '/../../../config/node-rule-map.json'; if (! file_exists($nodeRuleMapFilePath)) { - return []; + return self::$cachedNodeRuleMap = []; } $nodeRuleMap = Json::decode(FileSystem::read($nodeRuleMapFilePath), true); if (! is_array($nodeRuleMap)) { - return []; + return self::$cachedNodeRuleMap = []; } /** @var array, array>> $nodeRuleMap */ - return $nodeRuleMap; + return self::$cachedNodeRuleMap = $nodeRuleMap; } } From 9478413bcf5ec2f8281c1f00bbdcf08db7f8dfa5 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 8 Oct 2026 19:32:19 +0200 Subject: [PATCH 3/6] Regenerate node-rule map against current dev-main extension packages --- .github/workflows/code_analysis.yaml | 4 +- build/build-node-rule-map.php | 80 ++------------ config/node-rule-map.json | 10 +- .../src/NodeRuleMap/NodeRuleMapFactory.php | 102 ++++++++++++++++++ scripts/validate-node-rule-map.php | 75 +++++++++++++ .../NodeTraverser/RectorNodeTraverser.php | 2 +- 6 files changed, 195 insertions(+), 78 deletions(-) create mode 100644 scripts/src/NodeRuleMap/NodeRuleMapFactory.php create mode 100644 scripts/validate-node-rule-map.php diff --git a/.github/workflows/code_analysis.yaml b/.github/workflows/code_analysis.yaml index 8e4733455a2..1e4ecfbf23b 100644 --- a/.github/workflows/code_analysis.yaml +++ b/.github/workflows/code_analysis.yaml @@ -30,9 +30,7 @@ jobs: - name: 'Node Rule Map Up To Date' - run: | - composer build-node-rule-map - git diff --exit-code config/node-rule-map.json + run: php scripts/validate-node-rule-map.php - name: 'PHPStan' diff --git a/build/build-node-rule-map.php b/build/build-node-rule-map.php index 5c30c3bec59..6ffa8fa2ee8 100644 --- a/build/build-node-rule-map.php +++ b/build/build-node-rule-map.php @@ -2,13 +2,10 @@ declare(strict_types=1); -use Nette\Loaders\RobotLoader; -use PhpParser\Node; use Rector\Console\Style\SymfonyStyleFactory; -use Rector\Contract\Rector\RectorInterface; use Rector\Scripts\Finder\RectorClassFinder; +use Rector\Scripts\NodeRuleMap\NodeRuleMapFactory; use Rector\Util\Reflection\PrivatesAccessor; -use Symfony\Component\Console\Command\Command; $possiblePaths = [ // rector-src @@ -31,7 +28,7 @@ $symfonyStyleFactory = new SymfonyStyleFactory(new PrivatesAccessor()); $symfonyStyle = $symfonyStyleFactory->create(); -// 1. collect rule classes from core + symfony/doctrine/phpunit +// core rules + symfony/doctrine/phpunit extension packages $ruleDirectories = [ $rootDirectory . '/rules', $rootDirectory . '/vendor/rector/rector-symfony/rules', @@ -42,73 +39,18 @@ $rootDirectory . '/vendor/rector/rector-phpunit/src', ]; -$ruleDirectories = array_filter($ruleDirectories, 'is_dir'); - -$rectorClassFinder = new RectorClassFinder(); -$rectorClasses = $rectorClassFinder->find($ruleDirectories); - -// keep only active Rector rules, skip PostRectors and other *Rector.php helpers -$nodeTypesByRectorClass = []; -foreach ($rectorClasses as $rectorClass) { - if (! is_a($rectorClass, RectorInterface::class, true)) { - continue; - } - - $reflectionClass = new ReflectionClass($rectorClass); - $rector = $reflectionClass->newInstanceWithoutConstructor(); - - $nodeTypesByRectorClass[$rectorClass] = $rector->getNodeTypes(); -} - -// 2. collect all concrete PhpParser node classes, core + Rector custom nodes (e.g. FileNode) -$robotLoader = new RobotLoader(); -$robotLoader->addDirectory($rootDirectory . '/vendor/nikic/php-parser/lib/PhpParser/Node'); -$robotLoader->addDirectory($rootDirectory . '/src/PhpParser/Node'); -$robotLoader->setCacheDirectory(sys_get_temp_dir() . '/rector-node-rule-map'); -$robotLoader->refresh(); - -$nodeClasses = []; -foreach (array_keys($robotLoader->getIndexedClasses()) as $class) { - $reflectionClass = new ReflectionClass($class); - if (! $reflectionClass->isInstantiable()) { - continue; - } - - if (! $reflectionClass->isSubclassOf(Node::class)) { - continue; - } - - $nodeClasses[] = $class; -} - -// 3. resolve rules per concrete node class, mirroring RectorNodeTraverser::getVisitorsForNode() is_a() match -$nodeRuleMap = []; -foreach ($nodeClasses as $nodeClass) { - $matchedRectorClasses = []; - foreach ($nodeTypesByRectorClass as $rectorClass => $nodeTypes) { - foreach ($nodeTypes as $nodeType) { - if (is_a($nodeClass, $nodeType, true)) { - $matchedRectorClasses[] = $rectorClass; - break; - } - } - } - - sort($matchedRectorClasses); - $nodeRuleMap[$nodeClass] = $matchedRectorClasses; -} +$nodeDirectories = [ + $rootDirectory . '/vendor/nikic/php-parser/lib/PhpParser/Node', + $rootDirectory . '/src/PhpParser/Node', +]; -ksort($nodeRuleMap); +$nodeRuleMapFactory = new NodeRuleMapFactory(new RectorClassFinder()); +$nodeRuleMap = $nodeRuleMapFactory->create($ruleDirectories, $nodeDirectories); -$outputFilePath = $rootDirectory . '/config/node-rule-map.json'; $json = json_encode($nodeRuleMap, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n"; -file_put_contents($outputFilePath, $json); +file_put_contents($rootDirectory . '/config/node-rule-map.json', $json); $symfonyStyle->success(sprintf( - 'Generated map for %d node classes from %d rules into %s', - count($nodeRuleMap), - count($nodeTypesByRectorClass), - 'config/node-rule-map.json' + 'Generated map for %d node classes into config/node-rule-map.json', + count($nodeRuleMap) )); - -return Command::SUCCESS; diff --git a/config/node-rule-map.json b/config/node-rule-map.json index 1054680b93e..19504991f9e 100644 --- a/config/node-rule-map.json +++ b/config/node-rule-map.json @@ -9,6 +9,7 @@ "PhpParser\\Node\\Attribute": [ "Rector\\CodeQuality\\Rector\\Attribute\\ExplicitAttributeNamedArgsRector", "Rector\\CodeQuality\\Rector\\Attribute\\SortAttributeNamedArgsRector", + "Rector\\Doctrine\\Orm37\\Rector\\Attribute\\DoctrineOrderByAttributeSortDirectionRector", "Rector\\Symfony\\Symfony61\\Rector\\Attribute\\RouteRequirementStringToConstantRector" ], "PhpParser\\Node\\AttributeGroup": [ @@ -537,6 +538,7 @@ "Rector\\Doctrine\\Orm28\\Rector\\MethodCall\\IterateToToIterableRector", "Rector\\Doctrine\\Orm30\\Rector\\MethodCall\\CastDoctrineExprToStringRector", "Rector\\Doctrine\\Orm30\\Rector\\MethodCall\\SetParametersArrayToCollectionRector", + "Rector\\Doctrine\\Orm37\\Rector\\MethodCall\\DoctrineQueryBuilderSortDirectionRector", "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\AssertNullOnCollectionToAssertEmptyRector", "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\AssertSameCountOnCollectionToAssertCountRector", "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\SetArrayToNewCollectionRector", @@ -567,6 +569,7 @@ "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\StringCastAssertStringContainsStringRector", "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWillMethodRector", "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\UseSpecificWithMethodRector", + "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\WillReturnCallbackFallbackToReturnFalseRector", "Rector\\PHPUnit\\CodeQuality\\Rector\\MethodCall\\WithCallbackIdenticalToStandaloneAssertsRector", "Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\PropertyExistsWithoutAssertRector", "Rector\\PHPUnit\\PHPUnit100\\Rector\\MethodCall\\RemoveSetMethodsMethodCallRector", @@ -633,6 +636,7 @@ "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullArgOnNullDefaultParamRector", "Rector\\DeadCode\\Rector\\MethodCall\\RemoveNullNamedArgOnNullDefaultParamRector", "Rector\\Doctrine\\Dbal42\\Rector\\New_\\AddArrayResultColumnNamesRector", + "Rector\\Doctrine\\Orm37\\Rector\\MethodCall\\DoctrineQueryBuilderSortDirectionRector", "Rector\\Doctrine\\TypedCollections\\Rector\\MethodCall\\SetArrayToNewCollectionRector", "Rector\\Doctrine\\TypedCollections\\Rector\\New_\\RemoveNewArrayCollectionWrapRector", "Rector\\PHPUnit\\CodeQuality\\Rector\\CallLike\\DirectInstanceOverMockArgRector", @@ -1203,7 +1207,6 @@ "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\AddProphecyTraitRector", "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\ParentTestClassConstructorRector", "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\PublicDataProviderClassMethodRector", - "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\RemoveNamedArgsInDataProviderRector", "Rector\\PHPUnit\\PHPUnit100\\Rector\\Class_\\StaticDataProviderClassMethodRector", "Rector\\PHPUnit\\PHPUnit110\\Rector\\Class_\\NamedArgumentForDataProviderRector", "Rector\\PHPUnit\\PHPUnit120\\Rector\\Class_\\AllowMockObjectsForDataProviderRector", @@ -1531,7 +1534,6 @@ "Rector\\Doctrine\\TypedCollections\\Rector\\Expression\\RemoveAssertNotNullOnCollectionRector", "Rector\\Doctrine\\TypedCollections\\Rector\\Expression\\RemoveCoalesceAssignOnCollectionRector", "Rector\\PHPUnit\\CodeQuality\\Rector\\Expression\\AssertArrayCastedObjectToAssertSameRector", - "Rector\\PHPUnit\\CodeQuality\\Rector\\Expression\\ConfiguredMockEntityToSetterObjectRector", "Rector\\PHPUnit\\PHPUnit100\\Rector\\StmtsAwareInterface\\WithConsecutiveRector", "Rector\\Php72\\Rector\\Assign\\ListEachRector", "Rector\\Php72\\Rector\\Assign\\ReplaceEachAssignmentWithKeyCurrentRector", @@ -1944,9 +1946,7 @@ "Rector\\TypeDeclarationDocblocks\\Rector\\Property\\MergePhpstanDocTagIntoNativeRector", "Rector\\TypeDeclaration\\Rector\\Property\\AddPropertyTypeDeclarationRector" ], - "PhpParser\\Node\\Stmt\\Return_": [ - "Rector\\PHPUnit\\CodeQuality\\Rector\\Expression\\ConfiguredMockEntityToSetterObjectRector" - ], + "PhpParser\\Node\\Stmt\\Return_": [], "PhpParser\\Node\\Stmt\\Static_": [], "PhpParser\\Node\\Stmt\\Switch_": [ "Rector\\CodeQuality\\Rector\\Switch_\\SingularSwitchToIfRector", diff --git a/scripts/src/NodeRuleMap/NodeRuleMapFactory.php b/scripts/src/NodeRuleMap/NodeRuleMapFactory.php new file mode 100644 index 00000000000..e5282c0afc2 --- /dev/null +++ b/scripts/src/NodeRuleMap/NodeRuleMapFactory.php @@ -0,0 +1,102 @@ +, array>> + */ + public function create(array $ruleDirectories, array $nodeDirectories): array + { + $nodeTypesByRectorClass = $this->resolveNodeTypesByRectorClass($ruleDirectories); + $nodeClasses = $this->resolveNodeClasses($nodeDirectories); + + $nodeRuleMap = []; + foreach ($nodeClasses as $nodeClass) { + $matchedRectorClasses = []; + foreach ($nodeTypesByRectorClass as $rectorClass => $nodeTypes) { + foreach ($nodeTypes as $nodeType) { + if (is_a($nodeClass, $nodeType, true)) { + $matchedRectorClasses[] = $rectorClass; + break; + } + } + } + + sort($matchedRectorClasses); + $nodeRuleMap[$nodeClass] = $matchedRectorClasses; + } + + ksort($nodeRuleMap); + + return $nodeRuleMap; + } + + /** + * @param string[] $ruleDirectories + * @return array, array>> + */ + private function resolveNodeTypesByRectorClass(array $ruleDirectories): array + { + $ruleDirectories = array_filter($ruleDirectories, 'is_dir'); + $rectorClasses = $this->rectorClassFinder->find($ruleDirectories); + + $nodeTypesByRectorClass = []; + foreach ($rectorClasses as $rectorClass) { + // skip PostRectors and other *Rector.php helpers + if (! is_a($rectorClass, RectorInterface::class, true)) { + continue; + } + + $reflectionClass = new ReflectionClass($rectorClass); + $rector = $reflectionClass->newInstanceWithoutConstructor(); + + $nodeTypesByRectorClass[$rectorClass] = $rector->getNodeTypes(); + } + + return $nodeTypesByRectorClass; + } + + /** + * @param string[] $nodeDirectories + * @return array> + */ + private function resolveNodeClasses(array $nodeDirectories): array + { + $robotLoader = new RobotLoader(); + $robotLoader->addDirectory(...$nodeDirectories); + $robotLoader->setCacheDirectory(sys_get_temp_dir() . '/rector-node-rule-map'); + $robotLoader->refresh(); + + $nodeClasses = []; + foreach (array_keys($robotLoader->getIndexedClasses()) as $class) { + if (! is_a($class, Node::class, true)) { + continue; + } + + if (! (new ReflectionClass($class))->isInstantiable()) { + continue; + } + + $nodeClasses[] = $class; + } + + return $nodeClasses; + } +} diff --git a/scripts/validate-node-rule-map.php b/scripts/validate-node-rule-map.php new file mode 100644 index 00000000000..7004feb48cf --- /dev/null +++ b/scripts/validate-node-rule-map.php @@ -0,0 +1,75 @@ +create(); + +// extension packages move independently (dev-main), so only the in-repo core rules are validated; +// extension rules ship best-effort and the traverser falls back to is_a() resolution for any drift +$siblingNamespacePrefixes = ['Rector\\Symfony\\', 'Rector\\Doctrine\\', 'Rector\\PHPUnit\\']; + +$nodeDirectories = [ + $rootDirectory . '/vendor/nikic/php-parser/lib/PhpParser/Node', + $rootDirectory . '/src/PhpParser/Node', +]; + +$nodeRuleMapFactory = new NodeRuleMapFactory(new RectorClassFinder()); +$expectedCoreMap = $nodeRuleMapFactory->create([$rootDirectory . '/rules'], $nodeDirectories); + +$committedMap = Json::decode(FileSystem::read($rootDirectory . '/config/node-rule-map.json'), true); +if (! is_array($committedMap)) { + $symfonyStyle->error('The committed config/node-rule-map.json is not valid.'); + exit(Command::FAILURE); +} + +// keep only core rules from the committed map +$committedCoreMap = []; +foreach ($committedMap as $nodeClass => $ruleClasses) { + $coreRuleClasses = array_filter($ruleClasses, static function (string $ruleClass) use ($siblingNamespacePrefixes): bool { + foreach ($siblingNamespacePrefixes as $siblingNamespacePrefix) { + if (str_starts_with($ruleClass, $siblingNamespacePrefix)) { + return false; + } + } + + return true; + }); + + $committedCoreMap[$nodeClass] = array_values($coreRuleClasses); +} + +if (Json::encode($committedCoreMap) === Json::encode($expectedCoreMap)) { + $symfonyStyle->success('The core rules in config/node-rule-map.json are up to date.'); + exit(Command::SUCCESS); +} + +$symfonyStyle->error( + 'The core rules in config/node-rule-map.json are out of date. Run "composer build-node-rule-map" and commit the result.' +); + +// report the first differing node classes to make the fix obvious +foreach ($expectedCoreMap as $nodeClass => $expectedRuleClasses) { + $committedRuleClasses = $committedCoreMap[$nodeClass] ?? []; + if ($committedRuleClasses === $expectedRuleClasses) { + continue; + } + + $symfonyStyle->writeln('' . $nodeClass . ''); + $symfonyStyle->writeln(' missing: ' . implode(', ', array_values(array_diff($expectedRuleClasses, $committedRuleClasses)))); + $symfonyStyle->writeln(' unexpected: ' . implode(', ', array_values(array_diff($committedRuleClasses, $expectedRuleClasses)))); +} + +exit(Command::FAILURE); diff --git a/src/PhpParser/NodeTraverser/RectorNodeTraverser.php b/src/PhpParser/NodeTraverser/RectorNodeTraverser.php index 9c12a76e989..91d307d8bb6 100644 --- a/src/PhpParser/NodeTraverser/RectorNodeTraverser.php +++ b/src/PhpParser/NodeTraverser/RectorNodeTraverser.php @@ -178,7 +178,7 @@ public function getVisitorsForNode(Node $node): array */ private function isVisitorForNodeClass(RectorInterface $rector, string $nodeClass): bool { - return array_any($rector->getNodeTypes(), fn(string $nodeType): bool => is_a($nodeClass, $nodeType, true)); + return array_any($rector->getNodeTypes(), fn (string $nodeType): bool => is_a($nodeClass, $nodeType, true)); } private function traverseNode(Node $node): void From 51fee11a56c7471727441a84be5f42391d516004 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 8 Oct 2026 20:29:30 +0000 Subject: [PATCH 4/6] [ci-review] Rector Rectify --- scripts/src/NodeRuleMap/NodeRuleMapFactory.php | 8 ++++---- scripts/validate-node-rule-map.php | 10 +--------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/scripts/src/NodeRuleMap/NodeRuleMapFactory.php b/scripts/src/NodeRuleMap/NodeRuleMapFactory.php index e5282c0afc2..6ff8bbc2562 100644 --- a/scripts/src/NodeRuleMap/NodeRuleMapFactory.php +++ b/scripts/src/NodeRuleMap/NodeRuleMapFactory.php @@ -10,10 +10,10 @@ use Rector\Scripts\Finder\RectorClassFinder; use ReflectionClass; -final class NodeRuleMapFactory +final readonly class NodeRuleMapFactory { public function __construct( - private readonly RectorClassFinder $rectorClassFinder + private RectorClassFinder $rectorClassFinder ) { } @@ -54,7 +54,7 @@ public function create(array $ruleDirectories, array $nodeDirectories): array */ private function resolveNodeTypesByRectorClass(array $ruleDirectories): array { - $ruleDirectories = array_filter($ruleDirectories, 'is_dir'); + $ruleDirectories = array_filter($ruleDirectories, is_dir(...)); $rectorClasses = $this->rectorClassFinder->find($ruleDirectories); $nodeTypesByRectorClass = []; @@ -90,7 +90,7 @@ private function resolveNodeClasses(array $nodeDirectories): array continue; } - if (! (new ReflectionClass($class))->isInstantiable()) { + if (! new ReflectionClass($class)->isInstantiable()) { continue; } diff --git a/scripts/validate-node-rule-map.php b/scripts/validate-node-rule-map.php index 7004feb48cf..cf5f54fdf60 100644 --- a/scripts/validate-node-rule-map.php +++ b/scripts/validate-node-rule-map.php @@ -38,15 +38,7 @@ // keep only core rules from the committed map $committedCoreMap = []; foreach ($committedMap as $nodeClass => $ruleClasses) { - $coreRuleClasses = array_filter($ruleClasses, static function (string $ruleClass) use ($siblingNamespacePrefixes): bool { - foreach ($siblingNamespacePrefixes as $siblingNamespacePrefix) { - if (str_starts_with($ruleClass, $siblingNamespacePrefix)) { - return false; - } - } - - return true; - }); + $coreRuleClasses = array_filter($ruleClasses, static fn(string $ruleClass): bool => array_all($siblingNamespacePrefixes, fn(string $siblingNamespacePrefix): bool => !str_starts_with($ruleClass, $siblingNamespacePrefix))); $committedCoreMap[$nodeClass] = array_values($coreRuleClasses); } From f37b97b7db9d8efeaa67eac79a4555f8daa46f8a Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sat, 10 Oct 2026 11:29:49 +0200 Subject: [PATCH 5/6] Regenerate node-rule map against current main --- config/node-rule-map.json | 69 +-------------------------------------- 1 file changed, 1 insertion(+), 68 deletions(-) diff --git a/config/node-rule-map.json b/config/node-rule-map.json index 19504991f9e..0186adaa99a 100644 --- a/config/node-rule-map.json +++ b/config/node-rule-map.json @@ -31,16 +31,11 @@ "PhpParser\\Node\\Expr\\ArrowFunction": [ "Rector\\CodingStyle\\Rector\\ArrowFunction\\ArrowFunctionDelegatingCallToFirstClassCallableRector", "Rector\\DeadCode\\Rector\\FunctionLike\\NarrowWideUnionReturnTypeRector", - "Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector", "Rector\\Php80\\Rector\\Class_\\AnnotationToAttributeRector", "Rector\\Renaming\\Rector\\Name\\RenameClassRector", "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", "Rector\\TypeDeclaration\\Rector\\ArrowFunction\\AddArrowFunctionReturnTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamStringTypeFromSprintfUseRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ArrayParamTypeByMethodCallTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ObjectParamTypeByMethodCallTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ScalarParamTypeByMethodCallTypeRector" + "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamStringTypeFromSprintfUseRector" ], "PhpParser\\Node\\Expr\\Assign": [ "Rector\\CodeQuality\\Rector\\Assign\\CombinedAssignRector", @@ -332,7 +327,6 @@ "PhpParser\\Node\\Expr\\Closure": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", "Rector\\CodeQuality\\Rector\\ClassMethod\\OptionalParametersAfterRequiredRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -364,10 +358,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Assign\\RenameVariableToMatchMethodCallReturnTypeRector", - "Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchMethodCallReturnTypeRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -396,10 +386,6 @@ "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector", "Rector\\Transform\\Rector\\Attribute\\AttributeKeyToClassConstFetchRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamStringTypeFromSprintfUseRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ArrayParamTypeByMethodCallTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ObjectParamTypeByMethodCallTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ScalarParamTypeByMethodCallTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictArrayParamDimFetchRector", "Rector\\TypeDeclaration\\Rector\\Closure\\AddClosureNeverReturnTypeRector", "Rector\\TypeDeclaration\\Rector\\Closure\\AddClosureVoidReturnTypeWhereNoReturnRector", @@ -819,7 +805,6 @@ "PhpParser\\Node\\StaticVar": [], "PhpParser\\Node\\Stmt\\Block": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -845,7 +830,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -868,7 +852,6 @@ ], "PhpParser\\Node\\Stmt\\Case_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -893,7 +876,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -913,7 +895,6 @@ "PhpParser\\Node\\Stmt\\Catch_": [ "Rector\\CodeQuality\\Rector\\Catch_\\ThrowWithPreviousExceptionRector", "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -938,7 +919,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -966,7 +946,6 @@ "Rector\\CodeQuality\\Rector\\ClassMethod\\ExplicitReturnNullRector", "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", "Rector\\CodeQuality\\Rector\\ClassMethod\\OptionalParametersAfterRequiredRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1024,11 +1003,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Assign\\RenameVariableToMatchMethodCallReturnTypeRector", - "Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector", - "Rector\\Naming\\Rector\\ClassMethod\\RenameVariableToMatchNewTypeRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchMethodCallReturnTypeRector", "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DataProviderAnnotationToAttributeRector", "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\TestWithAnnotationToAttributeRector", "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\CoversAnnotationWithValueToAttributeRector", @@ -1103,7 +1077,6 @@ "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnDocblockForScalarArrayFromAssignsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeFromTryCatchTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddVoidReturnTypeWhereNoReturnRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ArrayParamTypeByMethodCallTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstAndStrictReturnsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstReturnsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanStrictReturnsRector", @@ -1111,8 +1084,6 @@ "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NarrowObjectReturnTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictReturnsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictScalarReturnsRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ObjectParamTypeByMethodCallTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\PrivateMethodReturnTypeFromStrictNewArrayRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNeverTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNullableTypeRector", @@ -1130,7 +1101,6 @@ "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictTypedPropertyRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromSymfonySerializerRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnUnionTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ScalarParamTypeByMethodCallTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictArrayParamDimFetchRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictScalarReturnsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictStringReturnsRector", @@ -1177,7 +1147,6 @@ "Rector\\Doctrine\\TypedCollections\\Rector\\Class_\\InitializeCollectionInConstructorRector", "Rector\\Doctrine\\TypedCollections\\Rector\\Class_\\RemoveNullFromInstantiatedArrayCollectionPropertyRector", "Rector\\Doctrine\\TypedCollections\\Rector\\Property\\NarrowPropertyUnionToCollectionRector", - "Rector\\Naming\\Rector\\Class_\\RenamePropertyToMatchTypeRector", "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\ClassMethod\\DependsAnnotationWithValueToAttributeRector", "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\AnnotationWithValueToAttributeRector", "Rector\\PHPUnit\\AnnotationsToAttributes\\Rector\\Class_\\CoversAnnotationWithValueToAttributeRector", @@ -1329,7 +1298,6 @@ ], "PhpParser\\Node\\Stmt\\Declare_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1354,7 +1322,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -1373,7 +1340,6 @@ ], "PhpParser\\Node\\Stmt\\Do_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1400,7 +1366,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -1421,7 +1386,6 @@ "PhpParser\\Node\\Stmt\\Echo_": [], "PhpParser\\Node\\Stmt\\ElseIf_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1449,7 +1413,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -1468,7 +1431,6 @@ ], "PhpParser\\Node\\Stmt\\Else_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1494,7 +1456,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -1526,7 +1487,6 @@ "Rector\\CodeQuality\\Rector\\LogicalAnd\\AndAssignsToSeparateLinesRector", "Rector\\CodeQuality\\Rector\\Property\\FixClassCaseSensitivityVarDocblockRector", "Rector\\CodingStyle\\Rector\\Assign\\SplitDoubleAssignRector", - "Rector\\CodingStyle\\Rector\\PostInc\\PostIncDecToPreIncDecRector", "Rector\\DeadCode\\Rector\\ClassMethod\\RemoveNullTagValueNodeRector", "Rector\\DeadCode\\Rector\\Expression\\RemoveDeadStmtRector", "Rector\\DeadCode\\Rector\\Expression\\SimplifyMirrorAssignRector", @@ -1545,7 +1505,6 @@ ], "PhpParser\\Node\\Stmt\\Finally_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1570,7 +1529,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -1590,7 +1548,6 @@ "PhpParser\\Node\\Stmt\\For_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", "Rector\\CodeQuality\\Rector\\For_\\ForRepeatedCountToOwnVariableRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1599,7 +1556,6 @@ "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfNullableReturnRector", "Rector\\CodeQuality\\Rector\\If_\\SimplifyIfReturnBoolRector", "Rector\\CodeQuality\\Rector\\StmtsAwareInterface\\MoveInnerFunctionToTopLevelRector", - "Rector\\CodingStyle\\Rector\\PostInc\\PostIncDecToPreIncDecRector", "Rector\\CodingStyle\\Rector\\Stmt\\NewlineAfterStatementRector", "Rector\\DeadCode\\Rector\\Assign\\RemoveDoubleAssignRector", "Rector\\DeadCode\\Rector\\For_\\RemoveDeadContinueRector", @@ -1618,7 +1574,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -1637,7 +1592,6 @@ ], "PhpParser\\Node\\Stmt\\Foreach_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1665,7 +1619,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddInstanceofAssertForNullableArgumentRector", "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddInstanceofAssertForNullableInstanceRector", "Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\BareCreateMockAssignToDirectUseRector", @@ -1691,7 +1644,6 @@ "Rector\\CodeQuality\\Rector\\ClassMethod\\ExplicitReturnNullRector", "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", "Rector\\CodeQuality\\Rector\\ClassMethod\\OptionalParametersAfterRequiredRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1728,10 +1680,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Assign\\RenameVariableToMatchMethodCallReturnTypeRector", - "Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchMethodCallReturnTypeRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\FunctionLike\\ExceptionHandlerTypehintRector", @@ -1762,15 +1710,12 @@ "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamArrayDocblockBasedOnCallableNativeFuncCallRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamStringTypeFromSprintfUseRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnDocblockForScalarArrayFromAssignsRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ArrayParamTypeByMethodCallTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstAndStrictReturnsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanConstReturnsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\BoolReturnTypeFromBooleanStrictReturnsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NarrowBoolDocblockReturnTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictReturnsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\NumericReturnTypeFromStrictScalarReturnsRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ObjectParamTypeByMethodCallTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ParamTypeByMethodCallTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNeverTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNullableTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromReturnCastRector", @@ -1781,7 +1726,6 @@ "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictParamRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnTypeFromStrictTypedCallRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnUnionTypeRector", - "Rector\\TypeDeclaration\\Rector\\ClassMethod\\ScalarParamTypeByMethodCallTypeRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StrictArrayParamDimFetchRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictScalarReturnsRector", "Rector\\TypeDeclaration\\Rector\\ClassMethod\\StringReturnTypeFromStrictStringReturnsRector", @@ -1797,7 +1741,6 @@ "PhpParser\\Node\\Stmt\\HaltCompiler": [], "PhpParser\\Node\\Stmt\\If_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1838,7 +1781,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\RemoveAlwaysElseRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -1874,7 +1816,6 @@ "PhpParser\\Node\\Stmt\\Label": [], "PhpParser\\Node\\Stmt\\Namespace_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1902,7 +1843,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -1969,7 +1909,6 @@ ], "PhpParser\\Node\\Stmt\\TryCatch": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -1996,7 +1935,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -2020,7 +1958,6 @@ "PhpParser\\Node\\Stmt\\Use_": [], "PhpParser\\Node\\Stmt\\While_": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -2047,7 +1984,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", "Rector\\Php70\\Rector\\If_\\IfToSpaceshipRector", @@ -2072,7 +2008,6 @@ "PhpParser\\Node\\VariadicPlaceholder": [], "Rector\\PhpParser\\Node\\FileNode": [ "Rector\\CodeQuality\\Rector\\ClassMethod\\InlineArrayReturnAssignRector", - "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachItemsAssignToEmptyArrayToAssignRector", "Rector\\CodeQuality\\Rector\\Foreach_\\ForeachToInArrayRector", "Rector\\CodeQuality\\Rector\\Foreach_\\SimplifyForeachToCoalescingRector", "Rector\\CodeQuality\\Rector\\FunctionLike\\SimplifyUselessVariableRector", @@ -2100,7 +2035,6 @@ "Rector\\EarlyReturn\\Rector\\If_\\ChangeIfElseValueAssignToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\Return_\\PreparedValueToEarlyReturnRector", "Rector\\EarlyReturn\\Rector\\StmtsAwareInterface\\ReturnEarlyIfVariableRector", - "Rector\\Naming\\Rector\\Foreach_\\RenameForeachValueVariableToMatchExprVariableRector", "Rector\\PHPUnit\\CodeQuality\\Rector\\StmtsAwareInterface\\DeclareStrictTypesTestsRector", "Rector\\PHPUnit\\PHPUnit60\\Rector\\MethodCall\\DelegateExceptionArgumentsRector", "Rector\\PHPUnit\\PHPUnit90\\Rector\\MethodCall\\AssertRegExpRector", @@ -2118,7 +2052,6 @@ "Rector\\Symfony\\Symfony42\\Rector\\New_\\RootNodeTreeBuilderRector", "Rector\\Symfony\\Symfony43\\Rector\\StmtsAwareInterface\\TwigBundleFilesystemLoaderToTwigRector", "Rector\\Symfony\\Symfony72\\Rector\\StmtsAwareInterface\\PushRequestToRequestStackConstructorRector", - "Rector\\TypeDeclaration\\Rector\\StmtsAwareInterface\\DeclareStrictTypesRector", "Rector\\TypeDeclaration\\Rector\\StmtsAwareInterface\\SafeDeclareStrictTypesRector" ] } From 2beb0efe7b832862957d7fcaf49dbabb23c9f278 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sat, 10 Oct 2026 11:36:52 +0200 Subject: [PATCH 6/6] [perf] Short-circuit node classes with no subscribed rules in traverser --- scripts/validate-node-rule-map.php | 2 +- src/PhpParser/NodeTraverser/RectorNodeTraverser.php | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/validate-node-rule-map.php b/scripts/validate-node-rule-map.php index cf5f54fdf60..64efce6bf03 100644 --- a/scripts/validate-node-rule-map.php +++ b/scripts/validate-node-rule-map.php @@ -38,7 +38,7 @@ // keep only core rules from the committed map $committedCoreMap = []; foreach ($committedMap as $nodeClass => $ruleClasses) { - $coreRuleClasses = array_filter($ruleClasses, static fn(string $ruleClass): bool => array_all($siblingNamespacePrefixes, fn(string $siblingNamespacePrefix): bool => !str_starts_with($ruleClass, $siblingNamespacePrefix))); + $coreRuleClasses = array_filter($ruleClasses, static fn (string $ruleClass): bool => array_all($siblingNamespacePrefixes, fn (string $siblingNamespacePrefix): bool => ! str_starts_with($ruleClass, $siblingNamespacePrefix))); $committedCoreMap[$nodeClass] = array_values($coreRuleClasses); } diff --git a/src/PhpParser/NodeTraverser/RectorNodeTraverser.php b/src/PhpParser/NodeTraverser/RectorNodeTraverser.php index 91d307d8bb6..5359363996a 100644 --- a/src/PhpParser/NodeTraverser/RectorNodeTraverser.php +++ b/src/PhpParser/NodeTraverser/RectorNodeTraverser.php @@ -145,6 +145,11 @@ public function getVisitorsForNode(Node $node): array $visitorsByPosition = []; if (array_key_exists($nodeClass, $this->nodeRuleMap)) { + // no rule subscribes to this node class and no third-party rules to check + if ($this->nodeRuleMap[$nodeClass] === [] && $this->unknownVisitors === []) { + return $this->visitorsPerNodeClass[$nodeClass] = []; + } + // O(1) lookup in the static map, then keep only the active rules foreach ($this->nodeRuleMap[$nodeClass] as $ruleClass) { if (isset($this->visitorByClass[$ruleClass])) {