diff --git a/.github/workflows/code_analysis.yaml b/.github/workflows/code_analysis.yaml index 6889069be1c..7a9a210aa37 100644 --- a/.github/workflows/code_analysis.yaml +++ b/.github/workflows/code_analysis.yaml @@ -42,7 +42,7 @@ jobs: - name: 'Active Classes' run: | - vendor/bin/class-leak check bin config src rules utils --skip-suffix "Rector" --skip-type="Rector\\Utils\\Compiler\\Unprefixer" --skip-type="Rector\\NodeCollector\\BinaryOpConditionsCollector" --skip-type="Rector\\Set\\Contract\\SetListInterface" + vendor/bin/class-leak check bin config src rules utils --skip-suffix "Rector" --skip-type="Rector\\Utils\\Compiler\\Unprefixer" --skip-type="Rector\\NodeCollector\\BinaryOpConditionsCollector" --skip-type="Rector\\Set\\Contract\\SetListInterface" --skip-type="Rector\\Contract\\PhpParser\\Node\\StmtsAwareInterface" - name: 'Compatible PHPStan versions' diff --git a/build/build-preload.php b/build/build-preload.php index de87adabbbc..54539b212c6 100755 --- a/build/build-preload.php +++ b/build/build-preload.php @@ -361,12 +361,7 @@ private function findPhpParserFilesAndSortThem(string $vendorDir): array } } - $fileInfos = array_values($fileInfos); - - $stmtsAwareInterface = new SplFileInfo(__DIR__ . '/../src/Contract/PhpParser/Node/StmtsAwareInterface.php'); - array_splice($fileInfos, 1, 0, [$stmtsAwareInterface]); - - return $fileInfos; + return array_values($fileInfos); } /** diff --git a/composer.json b/composer.json index 135e20db25f..d7628c1a64a 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ "doctrine/inflector": "^2.1", "illuminate/container": "^11.46", "nette/utils": "^4.0", - "nikic/php-parser": "^5.6.1", + "nikic/php-parser": "dev-tv-add-stmts-iterable as 5.4", "ondram/ci-detector": "^4.2", "phpstan/phpdoc-parser": "^2.3", "phpstan/phpstan": "^2.1.26", @@ -81,6 +81,7 @@ "rules-tests", "tests" ], + "Rector\\Utils\\Tests\\": "utils-tests", "E2e\\Parallel\\Reflection\\Resolver\\": [ "e2e/parallel-reflection-resolver/src/", "e2e/no-parallel-reflection-resolver/src" @@ -116,21 +117,6 @@ "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/illuminate-container-container-php.patch" ], "nikic/php-parser": [ - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-expr-closure-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-finally-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-function-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-do-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-catch-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-trycatch-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-for-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-classmethod-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-else-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-while-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-foreach-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-if-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-case-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-elseif-php.patch", - "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-namespace-php.patch", "https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-nodetraverser-php.patch" ] }, @@ -147,5 +133,12 @@ } }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/tomasVotruba/php-parser", + "no-api": true + } + ] } diff --git a/phpstan.neon b/phpstan.neon index b63fa6411e0..aa1e7370480 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -332,7 +332,7 @@ parameters: - identifier: symplify.seeAnnotationToTest - path: utils/PHPStan/Rule/PreferDirectIsNameRule.php + path: utils/ - identifier: arrayValues.list @@ -356,3 +356,8 @@ parameters: - identifier: offsetAccess.invalidOffset path: src/CustomRules/SimpleNodeDumper.php + + - + message: '#Method Rector\\Utils\\Rector\\MakeUseOfContaintsStmtsRector\:\:refactor\(\) should return 4\|PhpParser\\Node\\Expr\\BinaryOp\\Identical\|PhpParser\\Node\\Expr\\MethodCall\|null but returns int\|null#' + path: utils/Rector/MakeUseOfContaintsStmtsRector.php + - message: '#Method Rector\\Utils\\Rector\\MakeUseOfContainsStmtsRector\:\:refactor\(\) should return 4\|PhpParser\\Node\\Expr\\BinaryOp\\Identical\|PhpParser\\Node\\Expr\\MethodCall\|null but returns int\|null#' diff --git a/preload-split-package.php b/preload-split-package.php index da953d5a7e5..93ea226bc28 100644 --- a/preload-split-package.php +++ b/preload-split-package.php @@ -26,7 +26,6 @@ function isPHPStanTestPreloaded(): bool } require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node.php'; -require_once __DIR__ . '/src/Contract/PhpParser/Node/StmtsAwareInterface.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php'; @@ -104,6 +103,7 @@ function isPHPStanTestPreloaded(): bool require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php'; +require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/ContainsStmts.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php'; diff --git a/preload.php b/preload.php index cecb0b90b4c..46a539dea11 100644 --- a/preload.php +++ b/preload.php @@ -26,7 +26,6 @@ function isPHPStanTestPreloaded(): bool } require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node.php'; -require_once __DIR__ . '/src/Contract/PhpParser/Node/StmtsAwareInterface.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php'; @@ -104,6 +103,7 @@ function isPHPStanTestPreloaded(): bool require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php'; +require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/ContainsStmts.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php'; diff --git a/rector.php b/rector.php index b24f7fe82f0..95749e3c241 100644 --- a/rector.php +++ b/rector.php @@ -6,6 +6,7 @@ use Rector\Config\RectorConfig; use Rector\DeadCode\Rector\ConstFetch\RemovePhpVersionIdCheckRector; use Rector\Php55\Rector\String_\StringClassNameToClassConstantRector; +use Rector\Utils\Rector\MakeUseOfContainsStmtsRector; return RectorConfig::configure() ->withPreparedSets( @@ -35,6 +36,7 @@ __DIR__ . '/config', __DIR__ . '/build/build-preload.php', ]) + ->withRules([MakeUseOfContainsStmtsRector::class]) ->withRootFiles() ->withImportNames(removeUnusedImports: true) ->withSkip([ diff --git a/rules/CodeQuality/Rector/ClassMethod/InlineArrayReturnAssignRector.php b/rules/CodeQuality/Rector/ClassMethod/InlineArrayReturnAssignRector.php index 04f999bcccc..42b6a87a8f2 100644 --- a/rules/CodeQuality/Rector/ClassMethod/InlineArrayReturnAssignRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/InlineArrayReturnAssignRector.php @@ -5,6 +5,7 @@ namespace Rector\CodeQuality\Rector\ClassMethod; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\Assign; @@ -16,7 +17,6 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Return_; use Rector\CodeQuality\NodeAnalyzer\VariableDimFetchAssignResolver; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Exception\NotImplementedYetException; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -66,11 +66,11 @@ function getPerson() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php b/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php index 7aaf9dceb6d..9132d3b25ea 100644 --- a/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php +++ b/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php @@ -5,6 +5,7 @@ namespace Rector\CodeQuality\Rector\Foreach_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayDimFetch; @@ -15,7 +16,6 @@ use PhpParser\Node\Stmt\Foreach_; use PhpParser\NodeVisitor; use Rector\CodeQuality\NodeAnalyzer\ForeachAnalyzer; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeAnalyzer\ExprAnalyzer; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; @@ -75,11 +75,11 @@ public function run($items) */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/CodeQuality/Rector/Foreach_/ForeachToInArrayRector.php b/rules/CodeQuality/Rector/Foreach_/ForeachToInArrayRector.php index 8e5d9a7dd03..2a50ad03f5e 100644 --- a/rules/CodeQuality/Rector/Foreach_/ForeachToInArrayRector.php +++ b/rules/CodeQuality/Rector/Foreach_/ForeachToInArrayRector.php @@ -5,6 +5,7 @@ namespace Rector\CodeQuality\Rector\Foreach_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\Equal; use PhpParser\Node\Expr\BinaryOp\Identical; @@ -15,7 +16,6 @@ use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; use PhpParser\NodeFinder; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\BinaryOpManipulator; use Rector\Php71\ValueObject\TwoNodeMatch; use Rector\PhpParser\Node\Value\ValueResolver; @@ -64,11 +64,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php b/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php index 3e4729ca744..97ec5a7764a 100644 --- a/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php +++ b/rules/CodeQuality/Rector/Foreach_/SimplifyForeachToCoalescingRector.php @@ -5,6 +5,7 @@ namespace Rector\CodeQuality\Rector\Foreach_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\Assign; @@ -16,7 +17,6 @@ use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -57,11 +57,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php b/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php index ec3f04163c8..7f2f756a5ca 100644 --- a/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php +++ b/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php @@ -6,11 +6,11 @@ use PhpParser\Node; use PhpParser\Node\ArrayItem; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\List_; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Foreach_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer; use Rector\NodeManipulator\StmtsManipulator; use Rector\PhpParser\Node\BetterNodeFinder; @@ -71,11 +71,11 @@ public function run() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php b/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php index 0f9714edbac..87d9b39f2e1 100644 --- a/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php +++ b/rules/CodeQuality/Rector/FunctionLike/SimplifyUselessVariableRector.php @@ -6,6 +6,7 @@ use PhpParser\Comment\Doc; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\AssignOp; use PhpParser\Node\Expr\Ternary; @@ -15,7 +16,6 @@ use PhpParser\Node\Stmt\Return_; use PHPStan\Type\MixedType; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\NodeAnalyzer\CallAnalyzer; use Rector\NodeAnalyzer\VariableAnalyzer; @@ -106,11 +106,11 @@ function () { */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { @@ -152,11 +152,11 @@ public function refactor(Node $node): ?Node } private function processSimplifyUselessVariable( - StmtsAwareInterface $stmtsAware, + ContainsStmts $stmtsAware, Return_ $return, Assign|AssignOp $assign, int $key - ): ?StmtsAwareInterface { + ): ?ContainsStmts { if (! $assign instanceof Assign) { $binaryClass = $this->assignAndBinaryMap->getAlternative($assign); if ($binaryClass === null) { diff --git a/rules/CodeQuality/Rector/If_/ConsecutiveNullCompareReturnsToNullCoalesceQueueRector.php b/rules/CodeQuality/Rector/If_/ConsecutiveNullCompareReturnsToNullCoalesceQueueRector.php index a4687e98a3a..ec1d7b665c3 100644 --- a/rules/CodeQuality/Rector/If_/ConsecutiveNullCompareReturnsToNullCoalesceQueueRector.php +++ b/rules/CodeQuality/Rector/If_/ConsecutiveNullCompareReturnsToNullCoalesceQueueRector.php @@ -5,6 +5,7 @@ namespace Rector\CodeQuality\Rector\If_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\Coalesce; use PhpParser\Node\Expr\Throw_; @@ -12,7 +13,6 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\IfManipulator; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; @@ -72,11 +72,11 @@ public function run() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/CodeQuality/Rector/If_/SimplifyIfNotNullReturnRector.php b/rules/CodeQuality/Rector/If_/SimplifyIfNotNullReturnRector.php index 48c0b83880f..98b64bbbc64 100644 --- a/rules/CodeQuality/Rector/If_/SimplifyIfNotNullReturnRector.php +++ b/rules/CodeQuality/Rector/If_/SimplifyIfNotNullReturnRector.php @@ -5,11 +5,11 @@ namespace Rector\CodeQuality\Rector\If_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Stmt\Else_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\IfManipulator; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; @@ -56,13 +56,13 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ - public function refactor(Node $node): ?StmtsAwareInterface + public function refactor(Node $node): ?ContainsStmts { foreach ((array) $node->stmts as $key => $stmt) { if (! $stmt instanceof If_) { diff --git a/rules/CodeQuality/Rector/If_/SimplifyIfNullableReturnRector.php b/rules/CodeQuality/Rector/If_/SimplifyIfNullableReturnRector.php index 03767341002..8a9d1d895ea 100644 --- a/rules/CodeQuality/Rector/If_/SimplifyIfNullableReturnRector.php +++ b/rules/CodeQuality/Rector/If_/SimplifyIfNullableReturnRector.php @@ -5,6 +5,7 @@ namespace Rector\CodeQuality\Rector\If_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\BooleanNot; @@ -18,7 +19,6 @@ use PHPStan\Type\Type; use PHPStan\Type\UnionType; use Rector\CodeQuality\TypeResolver\AssignVariableTypeResolver; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\PhpDoc\TagRemover\VarTagRemover; use Rector\NodeManipulator\IfManipulator; use Rector\PhpParser\Node\Value\ValueResolver; @@ -83,11 +83,11 @@ public function get(): ?stdClass { */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/CodeQuality/Rector/If_/SimplifyIfReturnBoolRector.php b/rules/CodeQuality/Rector/If_/SimplifyIfReturnBoolRector.php index 12d21ee35f6..ec7bb7a7b2c 100644 --- a/rules/CodeQuality/Rector/If_/SimplifyIfReturnBoolRector.php +++ b/rules/CodeQuality/Rector/If_/SimplifyIfReturnBoolRector.php @@ -5,6 +5,7 @@ namespace Rector\CodeQuality\Rector\If_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\Equal; use PhpParser\Node\Expr\BinaryOp\Identical; @@ -16,7 +17,6 @@ use PhpParser\Node\Stmt\Return_; use Rector\BetterPhpDocParser\Comment\CommentsMerger; use Rector\CodeQuality\NodeManipulator\ExprBoolCaster; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\PhpParser\Printer\BetterStandardPrinter; use Rector\Rector\AbstractRector; @@ -63,11 +63,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/CodingStyle/Rector/Stmt/NewlineAfterStatementRector.php b/rules/CodingStyle/Rector/Stmt/NewlineAfterStatementRector.php index 857ca35b2cb..246852838cc 100644 --- a/rules/CodingStyle/Rector/Stmt/NewlineAfterStatementRector.php +++ b/rules/CodingStyle/Rector/Stmt/NewlineAfterStatementRector.php @@ -6,6 +6,7 @@ use PhpParser\Comment; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassConst; @@ -23,7 +24,6 @@ use PhpParser\Node\Stmt\Trait_; use PhpParser\Node\Stmt\TryCatch; use PhpParser\Node\Stmt\While_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Contract\Rector\HTMLAverseRectorInterface; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Rector\AbstractRector; @@ -95,22 +95,22 @@ public function second() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class, ClassLike::class]; + return [ContainsStmts::class, ClassLike::class]; } /** - * @param StmtsAwareInterface|ClassLike $node + * @param ContainsStmts|ClassLike $node */ - public function refactor(Node $node): null|StmtsAwareInterface|ClassLike + public function refactor(Node $node): null|ContainsStmts|ClassLike { return $this->processAddNewLine($node, false); } private function processAddNewLine( - StmtsAwareInterface|ClassLike $node, + ContainsStmts|ClassLike $node, bool $hasChanged, int $jumpToKey = 0 - ): null|StmtsAwareInterface|ClassLike { + ): null|ContainsStmts|ClassLike { if ($node->stmts === null) { return null; } diff --git a/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php b/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php index c85ac41cd20..68af63d8a1e 100644 --- a/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php +++ b/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php @@ -5,12 +5,12 @@ namespace Rector\DeadCode\Rector\Assign; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticPropertyFetch; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Expression; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractRector; @@ -47,11 +47,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php b/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php index da26f962428..de8cb8c6942 100644 --- a/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php +++ b/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php @@ -5,6 +5,7 @@ namespace Rector\DeadCode\Rector\For_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\CallLike; @@ -13,7 +14,6 @@ use PhpParser\Node\Stmt\For_; use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\If_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\EarlyReturn\NodeTransformer\ConditionInverter; use Rector\NodeManipulator\StmtsManipulator; use Rector\PhpParser\Node\BetterNodeFinder; @@ -76,11 +76,11 @@ public function run($value, $differentValue) */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): Node|null { @@ -113,7 +113,7 @@ public function refactor(Node $node): Node|null return null; } - private function processIf(If_ $if, int $key, StmtsAwareInterface $stmtsAware): void + private function processIf(If_ $if, int $key, ContainsStmts $stmtsAware): void { if ($if->elseifs !== []) { return; @@ -137,7 +137,7 @@ private function processIf(If_ $if, int $key, StmtsAwareInterface $stmtsAware): $this->hasChanged = true; } - private function processForForeach(For_|Foreach_ $for, int $key, StmtsAwareInterface $stmtsAware): void + private function processForForeach(For_|Foreach_ $for, int $key, ContainsStmts $stmtsAware): void { if ($for instanceof For_) { $variables = $this->betterNodeFinder->findInstanceOf( diff --git a/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php b/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php index 20a1e782cc1..583d21910f8 100644 --- a/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php +++ b/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php @@ -5,6 +5,7 @@ namespace Rector\DeadCode\Rector\Foreach_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Foreach_; use PhpParser\NodeFinder; @@ -12,7 +13,6 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Comments\NodeDocBlock\DocBlockUpdater; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer; use Rector\NodeManipulator\StmtsManipulator; use Rector\Rector\AbstractRector; @@ -59,11 +59,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php b/rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php index d328de2e17c..e252c74df33 100644 --- a/rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php +++ b/rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php @@ -5,6 +5,7 @@ namespace Rector\DeadCode\Rector\If_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; @@ -14,7 +15,6 @@ use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\If_; use PHPStan\Analyser\Scope; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\NodeManipulator\CountManipulator; use Rector\DeadCode\UselessIfCondBeforeForeachDetector; use Rector\NodeAnalyzer\PropertyFetchAnalyzer; @@ -83,12 +83,12 @@ public function run() */ public function getNodeTypes(): array { - return [If_::class, StmtsAwareInterface::class]; + return [If_::class, ContainsStmts::class]; } /** - * @param If_|StmtsAwareInterface $node - * @return Foreach_|StmtsAwareInterface|null + * @param If_|ContainsStmts $node + * @return Foreach_|ContainsStmts|null */ public function refactor(Node $node): Node|null { @@ -151,7 +151,7 @@ private function isUselessBooleanAnd(BooleanAnd $booleanAnd, Expr $foreachExpr): return $this->countManipulator->isCounterHigherThanOne($booleanAnd->right, $foreachExpr); } - private function refactorStmtsAware(StmtsAwareInterface $stmtsAware): ?StmtsAwareInterface + private function refactorStmtsAware(ContainsStmts $stmtsAware): ?ContainsStmts { if ($stmtsAware->stmts === null) { return null; diff --git a/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php b/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php index 6278b4977f7..ff2ba7fd8db 100644 --- a/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php +++ b/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php @@ -5,6 +5,7 @@ namespace Rector\DeadCode\Rector\Node; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\CallLike; use PhpParser\Node\Expr\FuncCall; @@ -25,7 +26,6 @@ use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Comments\NodeDocBlock\DocBlockUpdater; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\StmtsManipulator; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PhpParser\Node\Value\ValueResolver; @@ -98,11 +98,11 @@ public function get() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { @@ -190,7 +190,7 @@ public function refactor(Node $node): ?Node /** * @param string[] $extractValues */ - private function shouldSkip(StmtsAwareInterface $stmtsAware, int $key, Stmt $stmt, array $extractValues): bool + private function shouldSkip(ContainsStmts $stmtsAware, int $key, Stmt $stmt, array $extractValues): bool { if (! in_array($stmt::class, self::NODE_TYPES, true)) { return true; diff --git a/rules/DeadCode/Rector/Return_/RemoveDeadConditionAboveReturnRector.php b/rules/DeadCode/Rector/Return_/RemoveDeadConditionAboveReturnRector.php index 22e8a820d0c..c3778762dc9 100644 --- a/rules/DeadCode/Rector/Return_/RemoveDeadConditionAboveReturnRector.php +++ b/rules/DeadCode/Rector/Return_/RemoveDeadConditionAboveReturnRector.php @@ -5,11 +5,11 @@ namespace Rector\DeadCode\Rector\Return_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Else_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -61,13 +61,13 @@ public function go() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ - public function refactor(Node $node): ?StmtsAwareInterface + public function refactor(Node $node): ?ContainsStmts { foreach ((array) $node->stmts as $key => $stmt) { if (! $stmt instanceof Return_) { diff --git a/rules/DeadCode/Rector/Stmt/RemoveConditionExactReturnRector.php b/rules/DeadCode/Rector/Stmt/RemoveConditionExactReturnRector.php index 73930f12c8e..08155756511 100644 --- a/rules/DeadCode/Rector/Stmt/RemoveConditionExactReturnRector.php +++ b/rules/DeadCode/Rector/Stmt/RemoveConditionExactReturnRector.php @@ -5,12 +5,12 @@ namespace Rector\DeadCode\Rector\Stmt; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\Equal; use PhpParser\Node\Expr\BinaryOp\Identical; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -67,11 +67,11 @@ public function __construct(array $items) */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/DeadCode/Rector/Stmt/RemoveUnreachableStatementRector.php b/rules/DeadCode/Rector/Stmt/RemoveUnreachableStatementRector.php index 1ce39353c00..c8717a80d4a 100644 --- a/rules/DeadCode/Rector/Stmt/RemoveUnreachableStatementRector.php +++ b/rules/DeadCode/Rector/Stmt/RemoveUnreachableStatementRector.php @@ -5,8 +5,8 @@ namespace Rector\DeadCode\Rector\Stmt; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Stmt; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeAnalyzer\TerminatedNodeAnalyzer; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -56,11 +56,11 @@ public function run() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { @@ -88,7 +88,7 @@ public function refactor(Node $node): ?Node * @param Stmt[] $stmts * @return Stmt[] */ - private function processCleanUpUnreachableStmts(StmtsAwareInterface $stmtsAware, array $stmts): array + private function processCleanUpUnreachableStmts(ContainsStmts $stmtsAware, array $stmts): array { foreach ($stmts as $key => $stmt) { if (! isset($stmts[$key - 1])) { diff --git a/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php b/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php index 5487e37b9da..dc76dab3d71 100644 --- a/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php +++ b/rules/EarlyReturn/Rector/If_/ChangeIfElseValueAssignToEarlyReturnRector.php @@ -5,13 +5,13 @@ namespace Rector\EarlyReturn\Rector\If_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Else_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\IfManipulator; use Rector\NodeManipulator\StmtsManipulator; use Rector\Rector\AbstractRector; @@ -70,13 +70,13 @@ public function run() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ - public function refactor(Node $node): ?StmtsAwareInterface + public function refactor(Node $node): ?ContainsStmts { if ($node->stmts === null) { return null; diff --git a/rules/EarlyReturn/Rector/If_/ChangeNestedIfsToEarlyReturnRector.php b/rules/EarlyReturn/Rector/If_/ChangeNestedIfsToEarlyReturnRector.php index 47a6fb3a806..2a94808d174 100644 --- a/rules/EarlyReturn/Rector/If_/ChangeNestedIfsToEarlyReturnRector.php +++ b/rules/EarlyReturn/Rector/If_/ChangeNestedIfsToEarlyReturnRector.php @@ -5,11 +5,11 @@ namespace Rector\EarlyReturn\Rector\If_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; use PhpParser\Node\Expr\BooleanNot; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\EarlyReturn\NodeTransformer\ConditionInverter; use Rector\NodeManipulator\IfManipulator; use Rector\Rector\AbstractRector; @@ -73,13 +73,13 @@ public function run() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ - public function refactor(Node $node): ?StmtsAwareInterface + public function refactor(Node $node): ?ContainsStmts { if ($node->stmts === null) { return null; diff --git a/rules/EarlyReturn/Rector/Return_/PreparedValueToEarlyReturnRector.php b/rules/EarlyReturn/Rector/Return_/PreparedValueToEarlyReturnRector.php index 12d07352976..bb7b6c0e7ff 100644 --- a/rules/EarlyReturn/Rector/Return_/PreparedValueToEarlyReturnRector.php +++ b/rules/EarlyReturn/Rector/Return_/PreparedValueToEarlyReturnRector.php @@ -5,6 +5,7 @@ namespace Rector\EarlyReturn\Rector\Return_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\AssignOp; @@ -17,7 +18,6 @@ use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; use PhpParser\Node\Stmt\While_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\EarlyReturn\ValueObject\BareSingleAssignIf; use Rector\NodeManipulator\IfManipulator; use Rector\PhpParser\Node\BetterNodeFinder; @@ -87,13 +87,13 @@ public function run() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ - public function refactor(Node $node): ?StmtsAwareInterface + public function refactor(Node $node): ?ContainsStmts { if ($node->stmts === null) { return null; @@ -185,7 +185,7 @@ public function refactor(Node $node): ?StmtsAwareInterface * @param If_[] $ifs * @return BareSingleAssignIf[] */ - private function getMatchingBareSingleAssignIfs(array $ifs, StmtsAwareInterface $stmtsAware): array + private function getMatchingBareSingleAssignIfs(array $ifs, ContainsStmts $stmtsAware): array { $bareSingleAssignIfs = []; foreach ($ifs as $key => $if) { @@ -233,7 +233,7 @@ private function isVariableSharedInAssignIfsAndReturn( return true; } - private function matchBareSingleAssignIf(Stmt $stmt, int $key, StmtsAwareInterface $stmtsAware): ?BareSingleAssignIf + private function matchBareSingleAssignIf(Stmt $stmt, int $key, ContainsStmts $stmtsAware): ?BareSingleAssignIf { if (! $stmt instanceof If_) { return null; @@ -277,12 +277,12 @@ private function matchBareSingleAssignIf(Stmt $stmt, int $key, StmtsAwareInterfa * @param BareSingleAssignIf[] $bareSingleAssignIfs */ private function refactorToDirectReturns( - StmtsAwareInterface $stmtsAware, + ContainsStmts $stmtsAware, int $initialAssignPosition, array $bareSingleAssignIfs, Assign $initialAssign, Return_ $return - ): StmtsAwareInterface { + ): ContainsStmts { // 1. remove initial assign unset($stmtsAware->stmts[$initialAssignPosition]); diff --git a/rules/EarlyReturn/Rector/Return_/ReturnBinaryOrToEarlyReturnRector.php b/rules/EarlyReturn/Rector/Return_/ReturnBinaryOrToEarlyReturnRector.php index 83ba2deaf3d..8fa64eb2353 100644 --- a/rules/EarlyReturn/Rector/Return_/ReturnBinaryOrToEarlyReturnRector.php +++ b/rules/EarlyReturn/Rector/Return_/ReturnBinaryOrToEarlyReturnRector.php @@ -5,12 +5,12 @@ namespace Rector\EarlyReturn\Rector\Return_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; use PhpParser\Node\Expr\BinaryOp\BooleanOr; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeAnalyzer\CallAnalyzer; use Rector\PhpParser\Node\AssignAndBinaryMap; use Rector\Rector\AbstractRector; @@ -64,11 +64,11 @@ public function accept() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/EarlyReturn/Rector/StmtsAwareInterface/ReturnEarlyIfVariableRector.php b/rules/EarlyReturn/Rector/StmtsAwareInterface/ReturnEarlyIfVariableRector.php index ba4f26cf053..205530581a3 100644 --- a/rules/EarlyReturn/Rector/StmtsAwareInterface/ReturnEarlyIfVariableRector.php +++ b/rules/EarlyReturn/Rector/StmtsAwareInterface/ReturnEarlyIfVariableRector.php @@ -5,6 +5,7 @@ namespace Rector\EarlyReturn\Rector\StmtsAwareInterface; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Variable; @@ -15,7 +16,6 @@ use PhpParser\Node\Stmt\Return_; use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeAnalyzer\VariableAnalyzer; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -73,11 +73,11 @@ public function run($value) */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { @@ -150,7 +150,7 @@ private function matchOnlyIfStmtReturnExpr(Stmt $onlyIfStmt, Variable $returnVar return $assign->expr; } - private function matchNextStmtReturnVariable(StmtsAwareInterface $stmtsAware, int $key): Variable|null + private function matchNextStmtReturnVariable(ContainsStmts $stmtsAware, int $key): Variable|null { $nextStmt = $stmtsAware->stmts[$key + 1] ?? null; diff --git a/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php b/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php index 460faad02ad..3c3eb9f9a2e 100644 --- a/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php +++ b/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php @@ -5,9 +5,9 @@ namespace Rector\Naming\Rector\Foreach_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Foreach_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Naming\ExpectedNameResolver\InflectorSingularResolver; use Rector\NodeAnalyzer\PropertyFetchAnalyzer; use Rector\NodeManipulator\StmtsManipulator; @@ -69,11 +69,11 @@ public function run() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php b/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php index 8b21423f11e..ce601ad946a 100644 --- a/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php +++ b/rules/Php52/Rector/Switch_/ContinueToBreakInSwitchRector.php @@ -5,6 +5,7 @@ namespace Rector\Php52\Rector\Switch_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Variable; @@ -21,7 +22,6 @@ use PhpParser\Node\Stmt\While_; use PhpParser\NodeVisitor; use PHPStan\Type\Constant\ConstantIntegerType; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; @@ -107,7 +107,7 @@ public function refactor(Node $node): ?Switch_ return $node; } - private function processContinueStatement(Stmt|StmtsAwareInterface $stmt): void + private function processContinueStatement(Stmt|ContainsStmts $stmt): void { $this->traverseNodesWithCallable( $stmt, diff --git a/rules/Php70/Rector/If_/IfToSpaceshipRector.php b/rules/Php70/Rector/If_/IfToSpaceshipRector.php index 6cde006b02c..49b9ed10ed6 100644 --- a/rules/Php70/Rector/If_/IfToSpaceshipRector.php +++ b/rules/Php70/Rector/If_/IfToSpaceshipRector.php @@ -5,6 +5,7 @@ namespace Rector\Php70\Rector\If_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\Equal; use PhpParser\Node\Expr\BinaryOp\Identical; @@ -13,7 +14,6 @@ use PhpParser\Node\Stmt\Else_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Php70\Enum\BattleshipCompareOrder; use Rector\Php70\NodeAnalyzer\BattleshipTernaryAnalyzer; use Rector\Php70\ValueObject\ComparedExprs; @@ -65,11 +65,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class, If_::class]; + return [ContainsStmts::class, If_::class]; } /** - * @param StmtsAwareInterface|If_ $node + * @param ContainsStmts|If_ $node */ public function refactor(Node $node): ?Node { diff --git a/rules/Php70/Rector/StmtsAwareInterface/IfIssetToCoalescingRector.php b/rules/Php70/Rector/StmtsAwareInterface/IfIssetToCoalescingRector.php index f0bea02d07d..adad2ebd9bd 100644 --- a/rules/Php70/Rector/StmtsAwareInterface/IfIssetToCoalescingRector.php +++ b/rules/Php70/Rector/StmtsAwareInterface/IfIssetToCoalescingRector.php @@ -5,6 +5,7 @@ namespace Rector\Php70\Rector\StmtsAwareInterface; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\Coalesce; use PhpParser\Node\Expr\Isset_; @@ -12,7 +13,6 @@ use PhpParser\Node\Stmt\Else_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -65,11 +65,11 @@ public function resolve($key) */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/Php72/Rector/FuncCall/ParseStrWithResultArgumentRector.php b/rules/Php72/Rector/FuncCall/ParseStrWithResultArgumentRector.php index aa59bec5a58..2945e5af117 100644 --- a/rules/Php72/Rector/FuncCall/ParseStrWithResultArgumentRector.php +++ b/rules/Php72/Rector/FuncCall/ParseStrWithResultArgumentRector.php @@ -6,11 +6,11 @@ use PhpParser\Node; use PhpParser\Node\Arg; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Expression; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -52,22 +52,22 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ - public function refactor(Node $node): ?StmtsAwareInterface + public function refactor(Node $node): ?ContainsStmts { return $this->processStrWithResult($node, false); } private function processStrWithResult( - StmtsAwareInterface $stmtsAware, + ContainsStmts $stmtsAware, bool $hasChanged, int $jumpToKey = 0 - ): null|StmtsAwareInterface { + ): null|ContainsStmts { if ($stmtsAware->stmts === null) { return null; } diff --git a/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php b/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php index 63a65592cf8..d83e5aa2e44 100644 --- a/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php +++ b/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php @@ -5,12 +5,12 @@ namespace Rector\Php73\Rector\FuncCall; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Name; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Expression; use PHPStan\Reflection\ReflectionProvider; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractRector; use Rector\ValueObject\PhpVersionFeature; @@ -87,13 +87,13 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ - public function refactor(Node $node): ?StmtsAwareInterface + public function refactor(Node $node): ?ContainsStmts { return $this->processArrayKeyFirstLast($node); } @@ -108,10 +108,8 @@ public function providePolyfillPackage(): string return PolyfillPackage::PHP_73; } - private function processArrayKeyFirstLast( - StmtsAwareInterface $stmtsAware, - int $jumpToKey = 0 - ): ?StmtsAwareInterface { + private function processArrayKeyFirstLast(ContainsStmts $stmtsAware, int $jumpToKey = 0): ?ContainsStmts + { if ($stmtsAware->stmts === null) { return null; } @@ -165,7 +163,7 @@ private function processArrayKeyFirstLast( } private function changeNextKeyCall( - StmtsAwareInterface $stmtsAware, + ContainsStmts $stmtsAware, int $key, FuncCall $resetOrEndFuncCall, Name $newName @@ -219,7 +217,7 @@ private function resolveKeyFuncCall(Stmt $nextStmt, FuncCall $resetOrEndFuncCall } private function hasInternalPointerChangeNext( - StmtsAwareInterface $stmtsAware, + ContainsStmts $stmtsAware, int $nextKey, int $totalKeys, FuncCall $funcCall diff --git a/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php b/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php index 8d2c18b7cab..88a9ce903d1 100644 --- a/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php +++ b/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php @@ -6,12 +6,12 @@ use PhpParser\Node; use PhpParser\Node\Arg; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\ConstFetch; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Identifier; use PhpParser\Node\Name; use PhpParser\Node\Scalar\Int_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PhpParser\Node\Value\ValueResolver; use Rector\Rector\AbstractRector; @@ -58,11 +58,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php b/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php index 537e9ab1d9b..048eeca672a 100644 --- a/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php +++ b/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php @@ -5,10 +5,10 @@ namespace Rector\Php80\Rector\Catch_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Finally_; use PhpParser\Node\Stmt\TryCatch; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer; use Rector\NodeManipulator\StmtsManipulator; use Rector\PhpParser\Node\BetterNodeFinder; @@ -66,11 +66,11 @@ public function run() */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/Php80/Rector/Switch_/ChangeSwitchToMatchRector.php b/rules/Php80/Rector/Switch_/ChangeSwitchToMatchRector.php index 271047249be..311f8721e35 100644 --- a/rules/Php80/Rector/Switch_/ChangeSwitchToMatchRector.php +++ b/rules/Php80/Rector/Switch_/ChangeSwitchToMatchRector.php @@ -5,6 +5,7 @@ namespace Rector\Php80\Rector\Switch_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Cast; @@ -17,7 +18,6 @@ use PhpParser\Node\Stmt\Switch_; use PhpParser\NodeVisitor; use PHPStan\Type\ObjectType; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeAnalyzer\ExprAnalyzer; use Rector\Php80\NodeAnalyzer\MatchSwitchAnalyzer; use Rector\Php80\NodeFactory\MatchFactory; @@ -78,11 +78,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node * @return null|Node|NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN */ public function refactor(Node $node): null|Node|int diff --git a/rules/Php84/Rector/Foreach_/ForeachToArrayAllRector.php b/rules/Php84/Rector/Foreach_/ForeachToArrayAllRector.php index a3a977e2dad..f6047ebae0d 100644 --- a/rules/Php84/Rector/Foreach_/ForeachToArrayAllRector.php +++ b/rules/Php84/Rector/Foreach_/ForeachToArrayAllRector.php @@ -5,6 +5,7 @@ namespace Rector\Php84\Rector\Foreach_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\ArrowFunction; use PhpParser\Node\Expr\Assign; @@ -16,7 +17,6 @@ use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\StmtsManipulator; use Rector\Php84\NodeAnalyzer\ForeachKeyUsedInConditionalAnalyzer; use Rector\PhpParser\Node\Value\ValueResolver; @@ -81,11 +81,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { @@ -102,7 +102,7 @@ public function provideMinPhpVersion(): int return PhpVersionFeature::ARRAY_ALL; } - private function refactorBooleanAssignmentPattern(StmtsAwareInterface $stmtsAware): ?Node + private function refactorBooleanAssignmentPattern(ContainsStmts $stmtsAware): ?Node { foreach ($stmtsAware->stmts as $key => $stmt) { if (! $stmt instanceof Foreach_) { @@ -185,7 +185,7 @@ private function refactorBooleanAssignmentPattern(StmtsAwareInterface $stmtsAwar return null; } - private function refactorEarlyReturnPattern(StmtsAwareInterface $stmtsAware): ?Node + private function refactorEarlyReturnPattern(ContainsStmts $stmtsAware): ?Node { foreach ($stmtsAware->stmts as $key => $stmt) { if (! $stmt instanceof Foreach_) { diff --git a/rules/Php84/Rector/Foreach_/ForeachToArrayAnyRector.php b/rules/Php84/Rector/Foreach_/ForeachToArrayAnyRector.php index 9ddea5d90c2..162d5933769 100644 --- a/rules/Php84/Rector/Foreach_/ForeachToArrayAnyRector.php +++ b/rules/Php84/Rector/Foreach_/ForeachToArrayAnyRector.php @@ -5,6 +5,7 @@ namespace Rector\Php84\Rector\Foreach_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\ArrowFunction; use PhpParser\Node\Expr\Assign; @@ -15,7 +16,6 @@ use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Return_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\StmtsManipulator; use Rector\Php84\NodeAnalyzer\ForeachKeyUsedInConditionalAnalyzer; use Rector\PhpParser\Node\Value\ValueResolver; @@ -80,11 +80,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { @@ -101,7 +101,7 @@ public function provideMinPhpVersion(): int return PhpVersionFeature::ARRAY_ANY; } - private function refactorBooleanAssignmentPattern(StmtsAwareInterface $stmtsAware): ?Node + private function refactorBooleanAssignmentPattern(ContainsStmts $stmtsAware): ?Node { foreach ($stmtsAware->stmts as $key => $stmt) { if (! $stmt instanceof Foreach_) { @@ -182,7 +182,7 @@ private function refactorBooleanAssignmentPattern(StmtsAwareInterface $stmtsAwar return null; } - private function refactorEarlyReturnPattern(StmtsAwareInterface $stmtsAware): ?Node + private function refactorEarlyReturnPattern(ContainsStmts $stmtsAware): ?Node { foreach ($stmtsAware->stmts as $key => $stmt) { if (! $stmt instanceof Foreach_) { diff --git a/rules/Php84/Rector/Foreach_/ForeachToArrayFindKeyRector.php b/rules/Php84/Rector/Foreach_/ForeachToArrayFindKeyRector.php index 61f74fd1856..fca01d94fb6 100644 --- a/rules/Php84/Rector/Foreach_/ForeachToArrayFindKeyRector.php +++ b/rules/Php84/Rector/Foreach_/ForeachToArrayFindKeyRector.php @@ -5,6 +5,7 @@ namespace Rector\Php84\Rector\Foreach_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\ArrowFunction; use PhpParser\Node\Expr\Assign; @@ -14,7 +15,6 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\If_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\StmtsManipulator; use Rector\Php84\NodeAnalyzer\ForeachKeyUsedInConditionalAnalyzer; use Rector\PhpParser\Node\Value\ValueResolver; @@ -69,11 +69,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/Php84/Rector/Foreach_/ForeachToArrayFindRector.php b/rules/Php84/Rector/Foreach_/ForeachToArrayFindRector.php index 8ce48ae1252..77e892d6838 100644 --- a/rules/Php84/Rector/Foreach_/ForeachToArrayFindRector.php +++ b/rules/Php84/Rector/Foreach_/ForeachToArrayFindRector.php @@ -5,6 +5,7 @@ namespace Rector\Php84\Rector\Foreach_; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\ArrowFunction; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Variable; @@ -13,7 +14,6 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\If_; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeManipulator\StmtsManipulator; use Rector\Php84\NodeAnalyzer\ForeachKeyUsedInConditionalAnalyzer; use Rector\PhpParser\Node\Value\ValueResolver; @@ -64,11 +64,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/Transform/Rector/FuncCall/WrapFuncCallWithPhpVersionIdCheckerRector.php b/rules/Transform/Rector/FuncCall/WrapFuncCallWithPhpVersionIdCheckerRector.php index 694a7da036e..6fed421938e 100644 --- a/rules/Transform/Rector/FuncCall/WrapFuncCallWithPhpVersionIdCheckerRector.php +++ b/rules/Transform/Rector/FuncCall/WrapFuncCallWithPhpVersionIdCheckerRector.php @@ -6,6 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Arg; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; use PhpParser\Node\Expr\BinaryOp\Smaller; @@ -17,7 +18,6 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\If_; use PhpParser\NodeVisitor; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\Rector\AbstractRector; use Rector\Transform\ValueObject\WrapFuncCallWithPhpVersionIdChecker; @@ -63,11 +63,11 @@ public function getRuleDefinition(): RuleDefinition */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node * @return null|Node|NodeVisitor::DONT_TRAVERSE_CHILDREN */ public function refactor(Node $node): null|Node|int @@ -126,7 +126,7 @@ public function configure(array $configuration): void $this->wrapFuncCallWithPhpVersionIdCheckers = $configuration; } - private function isWrappedFuncCall(StmtsAwareInterface $stmtsAware): bool + private function isWrappedFuncCall(ContainsStmts $stmtsAware): bool { if (! $stmtsAware instanceof If_) { return false; diff --git a/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php b/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php index 51969277d0f..b0c7f37e423 100644 --- a/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php +++ b/rules/TypeDeclaration/Rector/StmtsAwareInterface/DeclareStrictTypesRector.php @@ -5,6 +5,7 @@ namespace Rector\TypeDeclaration\Rector\StmtsAwareInterface; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\DeclareItem; use PhpParser\Node\Identifier; use PhpParser\Node\Scalar\Int_; @@ -12,7 +13,6 @@ use PhpParser\Node\Stmt\Declare_; use PhpParser\Node\Stmt\Nop; use Rector\ChangesReporting\ValueObject\RectorWithLineChange; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Contract\Rector\HTMLAverseRectorInterface; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; use Rector\Rector\AbstractRector; @@ -114,11 +114,11 @@ public function beforeTraverse(array $nodes): ?array */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php b/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php index 23a79200535..25139f4d7cb 100644 --- a/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php +++ b/rules/TypeDeclaration/Rector/StmtsAwareInterface/IncreaseDeclareStrictTypesRector.php @@ -5,6 +5,7 @@ namespace Rector\TypeDeclaration\Rector\StmtsAwareInterface; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\DeclareItem; use PhpParser\Node\Identifier; use PhpParser\Node\Scalar\Int_; @@ -12,7 +13,6 @@ use PhpParser\Node\Stmt\Declare_; use PhpParser\Node\Stmt\Nop; use Rector\ChangesReporting\ValueObject\RectorWithLineChange; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Contract\Rector\ConfigurableRectorInterface; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; use Rector\Rector\AbstractRector; @@ -109,11 +109,11 @@ public function beforeTraverse(array $nodes): ?array */ public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node): ?Node { diff --git a/src/Application/NodeAttributeReIndexer.php b/src/Application/NodeAttributeReIndexer.php index f2051ed47fb..12a4aa5f553 100644 --- a/src/Application/NodeAttributeReIndexer.php +++ b/src/Application/NodeAttributeReIndexer.php @@ -5,6 +5,7 @@ namespace Rector\Application; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr\CallLike; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\FuncCall; @@ -21,14 +22,13 @@ use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Switch_; use PhpParser\Node\Stmt\TryCatch; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeTypeResolver\Node\AttributeKey; final class NodeAttributeReIndexer { public static function reIndexStmtKeyNodeAttributes(Node $node): ?Node { - if (! $node instanceof StmtsAwareInterface && ! $node instanceof ClassLike && ! $node instanceof Declare_ && ! $node instanceof Block) { + if (! $node instanceof ContainsStmts && ! $node instanceof ClassLike && ! $node instanceof Declare_ && ! $node instanceof Block) { return null; } diff --git a/src/Contract/PhpParser/Node/StmtsAwareInterface.php b/src/Contract/PhpParser/Node/StmtsAwareInterface.php index 7f5cd89b238..39cbc184698 100644 --- a/src/Contract/PhpParser/Node/StmtsAwareInterface.php +++ b/src/Contract/PhpParser/Node/StmtsAwareInterface.php @@ -10,6 +10,6 @@ /** * @property Stmt[]|null $stmts */ -interface StmtsAwareInterface extends Node +interface StmtsAwareInterface extends Node\ContainsStmts { } diff --git a/src/NodeAnalyzer/TerminatedNodeAnalyzer.php b/src/NodeAnalyzer/TerminatedNodeAnalyzer.php index 1a0ec572129..b28ac58becb 100644 --- a/src/NodeAnalyzer/TerminatedNodeAnalyzer.php +++ b/src/NodeAnalyzer/TerminatedNodeAnalyzer.php @@ -5,6 +5,7 @@ namespace Rector\NodeAnalyzer; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Exit_; use PhpParser\Node\Expr\Throw_; @@ -25,7 +26,6 @@ use PhpParser\Node\Stmt\Return_; use PhpParser\Node\Stmt\Switch_; use PhpParser\Node\Stmt\TryCatch; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; final class TerminatedNodeAnalyzer @@ -45,7 +45,7 @@ final class TerminatedNodeAnalyzer */ private const ALLOWED_CONTINUE_CURRENT_STMTS = [InlineHTML::class, Nop::class]; - public function isAlwaysTerminated(StmtsAwareInterface $stmtsAware, Stmt $node, Stmt $currentStmt): bool + public function isAlwaysTerminated(ContainsStmts $stmtsAware, Stmt $node, Stmt $currentStmt): bool { if (in_array($currentStmt::class, self::ALLOWED_CONTINUE_CURRENT_STMTS, true)) { return false; diff --git a/src/NodeManipulator/StmtsManipulator.php b/src/NodeManipulator/StmtsManipulator.php index eb018b2c1b1..99e94f04101 100644 --- a/src/NodeManipulator/StmtsManipulator.php +++ b/src/NodeManipulator/StmtsManipulator.php @@ -5,6 +5,7 @@ namespace Rector\NodeManipulator; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt; @@ -12,7 +13,6 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Finally_; use PhpParser\Node\Stmt\TryCatch; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; @@ -74,7 +74,7 @@ function (Node $node) use (&$stmts): null { } public function isVariableUsedInNextStmt( - StmtsAwareInterface $stmtsAware, + ContainsStmts $stmtsAware, int $jumpToKey, string $variableName ): bool { diff --git a/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/GlobalVariableNodeVisitor.php b/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/GlobalVariableNodeVisitor.php index 1e3c096b2f3..4dac5a04861 100644 --- a/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/GlobalVariableNodeVisitor.php +++ b/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/GlobalVariableNodeVisitor.php @@ -5,6 +5,7 @@ namespace Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt; @@ -12,7 +13,6 @@ use PhpParser\Node\Stmt\Global_; use PhpParser\NodeVisitor; use PhpParser\NodeVisitorAbstract; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; @@ -26,7 +26,7 @@ public function __construct( public function enterNode(Node $node): ?Node { - if (! $node instanceof StmtsAwareInterface) { + if (! $node instanceof ContainsStmts) { return null; } diff --git a/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/StaticVariableNodeVisitor.php b/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/StaticVariableNodeVisitor.php index fa3556bf986..ccc4d2d1719 100644 --- a/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/StaticVariableNodeVisitor.php +++ b/src/NodeTypeResolver/PHPStan/Scope/NodeVisitor/StaticVariableNodeVisitor.php @@ -5,6 +5,7 @@ namespace Rector\NodeTypeResolver\PHPStan\Scope\NodeVisitor; use PhpParser\Node; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt; @@ -12,7 +13,6 @@ use PhpParser\Node\Stmt\Static_; use PhpParser\NodeVisitor; use PhpParser\NodeVisitorAbstract; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PHPStan\Scope\Contract\NodeVisitor\ScopeResolverNodeVisitorInterface; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; @@ -26,7 +26,7 @@ public function __construct( public function enterNode(Node $node): ?Node { - if (! $node instanceof StmtsAwareInterface) { + if (! $node instanceof ContainsStmts) { return null; } diff --git a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php index 895b1efe969..cdccf7d908b 100644 --- a/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php +++ b/src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php @@ -524,7 +524,7 @@ private function processArrayItem(ArrayItem $arrayItem, MutatingScope $mutatingS private function decorateNodeAttrGroups(Node $node, MutatingScope $mutatingScope, callable $nodeCallback): void { // better to have AttrGroupsAwareInterface for all Node definition with attrGroups property - // but because may conflict with StmtsAwareInterface patch, this needs to be here + // but because may conflict with ContainsStmts patch, this needs to be here if ( ! $node instanceof Param && ! $node instanceof ArrowFunction && diff --git a/src/PhpParser/Node/CustomNode/FileWithoutNamespace.php b/src/PhpParser/Node/CustomNode/FileWithoutNamespace.php index d4e68fd6392..cb8c3289c04 100644 --- a/src/PhpParser/Node/CustomNode/FileWithoutNamespace.php +++ b/src/PhpParser/Node/CustomNode/FileWithoutNamespace.php @@ -4,13 +4,13 @@ namespace Rector\PhpParser\Node\CustomNode; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Stmt; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; /** * Inspired by https://github.com/phpstan/phpstan-src/commit/ed81c3ad0b9877e6122c79b4afda9d10f3994092 */ -final class FileWithoutNamespace extends Stmt implements StmtsAwareInterface +final class FileWithoutNamespace extends Stmt implements ContainsStmts { /** * @param Stmt[] $stmts @@ -33,4 +33,12 @@ public function getSubNodeNames(): array { return ['stmts']; } + + /** + * @return Stmt[] + */ + public function getStmts(): array + { + return $this->stmts; + } } diff --git a/tests/BetterPhpDocParser/PhpDoc/ArrayItemNode/ArrayItemNodeTest.php b/tests/BetterPhpDocParser/PhpDoc/ArrayItemNode/ArrayItemNodeTest.php index 5b6f7271f2e..8b5b7bee06c 100644 --- a/tests/BetterPhpDocParser/PhpDoc/ArrayItemNode/ArrayItemNodeTest.php +++ b/tests/BetterPhpDocParser/PhpDoc/ArrayItemNode/ArrayItemNodeTest.php @@ -5,12 +5,12 @@ namespace Rector\Tests\BetterPhpDocParser\PhpDoc\ArrayItemNode; use Nette\Utils\FileSystem as UtilsFileSystem; +use PhpParser\Node\ContainsStmts; use PhpParser\Node\Stmt\Class_; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\Printer\PhpDocInfoPrinter; use Rector\Comments\NodeDocBlock\DocBlockUpdater; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator; use Rector\PhpParser\Parser\RectorParser; use Rector\Testing\PHPUnit\AbstractLazyTestCase; @@ -51,15 +51,11 @@ public function testUpdateNestedClassAnnotation(): void $classDocComment = null; foreach ($newStmts as $newStmt) { - if (! $newStmt instanceof StmtsAwareInterface) { + if (! $newStmt instanceof ContainsStmts) { continue; } - if ($newStmt->stmts === null) { - continue; - } - - foreach ($newStmt->stmts as $stmt) { + foreach ($newStmt->getStmts() as $stmt) { if (! $stmt instanceof Class_) { continue; } diff --git a/tests/Issues/IndexedStmt/Source/ChangeLastIndex1Rector.php b/tests/Issues/IndexedStmt/Source/ChangeLastIndex1Rector.php index 437b5b92630..9a5f060401c 100644 --- a/tests/Issues/IndexedStmt/Source/ChangeLastIndex1Rector.php +++ b/tests/Issues/IndexedStmt/Source/ChangeLastIndex1Rector.php @@ -8,7 +8,7 @@ use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt\Expression; use PhpParser\NodeVisitor; -use Rector\Contract\PhpParser\Node\StmtsAwareInterface; +use PhpParser\Node\ContainsStmts; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -22,11 +22,11 @@ public function getRuleDefinition(): RuleDefinition public function getNodeTypes(): array { - return [StmtsAwareInterface::class]; + return [ContainsStmts::class]; } /** - * @param StmtsAwareInterface $node + * @param ContainsStmts $node */ public function refactor(Node $node) { @@ -43,4 +43,4 @@ public function refactor(Node $node) return null; } -} \ No newline at end of file +} diff --git a/utils-tests/Rector/MakeUseOfContainsStmtsRector/Fixture/contains_stmts_contract.php.inc b/utils-tests/Rector/MakeUseOfContainsStmtsRector/Fixture/contains_stmts_contract.php.inc new file mode 100644 index 00000000000..b2e68f6ae91 --- /dev/null +++ b/utils-tests/Rector/MakeUseOfContainsStmtsRector/Fixture/contains_stmts_contract.php.inc @@ -0,0 +1,39 @@ +stmts === null) { + return false; + } + + return true; + } +} + +?> +----- +getStmts() === []) { + return false; + } + + return true; + } +} + +?> diff --git a/utils-tests/Rector/MakeUseOfContainsStmtsRector/Fixture/skip_child_of_contract.php.inc b/utils-tests/Rector/MakeUseOfContainsStmtsRector/Fixture/skip_child_of_contract.php.inc new file mode 100644 index 00000000000..f1f46e38ac5 --- /dev/null +++ b/utils-tests/Rector/MakeUseOfContainsStmtsRector/Fixture/skip_child_of_contract.php.inc @@ -0,0 +1,13 @@ +stmts; + } +} diff --git a/utils-tests/Rector/MakeUseOfContainsStmtsRector/Fixture/skip_class.php.inc b/utils-tests/Rector/MakeUseOfContainsStmtsRector/Fixture/skip_class.php.inc new file mode 100644 index 00000000000..f1a30404273 --- /dev/null +++ b/utils-tests/Rector/MakeUseOfContainsStmtsRector/Fixture/skip_class.php.inc @@ -0,0 +1,13 @@ +stmts; + } +} diff --git a/utils-tests/Rector/MakeUseOfContainsStmtsRector/MakeUseOfContainsStmtsRectorTest.php b/utils-tests/Rector/MakeUseOfContainsStmtsRector/MakeUseOfContainsStmtsRectorTest.php new file mode 100644 index 00000000000..c25d3b8241e --- /dev/null +++ b/utils-tests/Rector/MakeUseOfContainsStmtsRector/MakeUseOfContainsStmtsRectorTest.php @@ -0,0 +1,27 @@ +doTestFile($filePath); + } + + public static function provideData(): \Iterator + { + return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/configured_rule.php'; + } +} diff --git a/utils-tests/Rector/MakeUseOfContainsStmtsRector/config/configured_rule.php b/utils-tests/Rector/MakeUseOfContainsStmtsRector/config/configured_rule.php new file mode 100644 index 00000000000..40c570d7237 --- /dev/null +++ b/utils-tests/Rector/MakeUseOfContainsStmtsRector/config/configured_rule.php @@ -0,0 +1,11 @@ +withRules([ + MakeUseOfContainsStmtsRector::class, + ]); diff --git a/utils/Rector/MakeUseOfContainsStmtsRector.php b/utils/Rector/MakeUseOfContainsStmtsRector.php new file mode 100644 index 00000000000..8d72fd1b2b4 --- /dev/null +++ b/utils/Rector/MakeUseOfContainsStmtsRector.php @@ -0,0 +1,181 @@ +stmts to $node->getStmts() for ContaintsStmts', []); + } + + public function getNodeTypes(): array + { + return [ + Identical::class, + PropertyFetch::class, + Function_::class, + Assign::class, + Foreach_::class, + ClassMethod::class, + ]; + } + + /** + * @param PropertyFetch|Identical|Function_|Assign|Foreach_|ClassMethod $node + * @return MethodCall|Identical|null|NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN + */ + public function refactor(Node $node): MethodCall|Identical|null|int + { + if ($node instanceof ClassMethod) { + if ($this->isName($node, 'getStmts')) { + // skip getter + return NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + + return null; + } + + if ($node instanceof Foreach_) { + return $this->refactorForeach($node); + } + + if ($node instanceof Function_) { + return $this->refactorFunction($node); + } + + if ($node instanceof Assign) { + return $this->refactorAssign($node); + } + + if ($node instanceof Identical) { + return $this->refactorIdentical($node); + } + + if (! $this->isName($node->name, 'stmts')) { + return null; + } + + if (! $this->isObjectType($node->var, new ObjectType(ContainsStmts::class))) { + return null; + } + + $callerType = $this->getType($node->var); + if ($callerType instanceof ObjectType) { + /** @var ClassReflection $callerClassReflection */ + $callerClassReflection = $callerType->getClassReflection(); + if (! $callerClassReflection->isInterface()) { + // we have to match interface exactly + return null; + } + } + + return new MethodCall($node->var, 'getStmts'); + } + + private function isStmtsPropertyFetch(Expr $expr): bool + { + if (! $expr instanceof PropertyFetch) { + return false; + } + + return $this->isName($expr->name, 'stmts'); + } + + private function refactorIdentical(Identical $identical): ?Identical + { + if (! $this->valueResolver->isNull($identical->right)) { + return null; + } + + if ($this->isStmtsPropertyFetch($identical->left)) { + /** @var PropertyFetch $propertyFetch */ + $propertyFetch = $identical->left; + + $identical->left = new MethodCall($propertyFetch->var, 'getStmts'); + $identical->right = new Array_([]); + + return $identical; + } + + return null; + } + + /** + * @return null|NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN + */ + private function refactorForeach(Foreach_ $foreach): ?int + { + if (! $this->isStmtsPropertyFetch($foreach->expr)) { + return null; + } + // skip $node->stmts in foreach with key, as key is probably used on the $node->stmts + if ($foreach->keyVar instanceof Expr) { + return NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + + return null; + } + + private function refactorFunction(Function_ $function): ?int + { + // keep any unset($node->stmts[x])) calls + if ($this->isName($function->name, 'unset')) { + return NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + + return null; + } + + /** + * @return null|NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN + */ + private function refactorAssign(Assign $assign): ?int + { + if ($assign->var instanceof ArrayDimFetch) { + $arrayDimFetch = $assign->var; + if ($this->isStmtsPropertyFetch($arrayDimFetch->var)) { + // keep $node->stmts[x] = ... + return NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + } + + if (! $this->isStmtsPropertyFetch($assign->var)) { + return null; + } + + // keep assign to $node->stmts property + return NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } +}