From 25eea958faac606bd3add4541f65d696244c021b Mon Sep 17 00:00:00 2001 From: Paul Rijke Date: Fri, 28 Nov 2025 08:41:29 +0100 Subject: [PATCH 1/5] feature: add handling for void magic methods --- .../Fixture/remove_return_clone.php.inc | 35 ++++++ .../Fixture/remove_return_construct.php.inc | 30 +++++ .../Fixture/remove_return_destruct.php.inc | 30 +++++ ...FromDocblockVoidMagicMethodsRectorTest.php | 28 +++++ .../config/configured_rule.php | 9 ++ ...turnFromDocblockVoidMagicMethodsRector.php | 112 ++++++++++++++++++ 6 files changed, 244 insertions(+) create mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_clone.php.inc create mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_construct.php.inc create mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_destruct.php.inc create mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest.php create mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/config/configured_rule.php create mode 100644 rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_clone.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_clone.php.inc new file mode 100644 index 00000000000..97060bb77e6 --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_clone.php.inc @@ -0,0 +1,35 @@ + +----- + diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_construct.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_construct.php.inc new file mode 100644 index 00000000000..40f336f6e41 --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_construct.php.inc @@ -0,0 +1,30 @@ + +----- + diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_destruct.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_destruct.php.inc new file mode 100644 index 00000000000..7f255f19cac --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_destruct.php.inc @@ -0,0 +1,30 @@ + +----- + diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest.php b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest.php new file mode 100644 index 00000000000..435f6b057f3 --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest.php @@ -0,0 +1,28 @@ +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/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/config/configured_rule.php b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/config/configured_rule.php new file mode 100644 index 00000000000..3d488b9ecba --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/config/configured_rule.php @@ -0,0 +1,9 @@ +withRules([RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector::class]); diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php new file mode 100644 index 00000000000..6df944b214a --- /dev/null +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php @@ -0,0 +1,112 @@ +returnType instanceof Node) { + return null; + } + + $magicMethodNames = ['__construct', '__destruct', '__clone']; + + $methodName = $this->getName($node); + + if (! in_array($methodName, $magicMethodNames, true)) { + return null; + } + + $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); + + $returnTagValueNode = $phpDocInfo->getReturnTagValue(); + + if (! $returnTagValueNode instanceof ReturnTagValueNode) { + return null; + } + + if ($returnTagValueNode->description !== '') { + return null; + } + + if (! $returnTagValueNode->type instanceof IdentifierTypeNode || $returnTagValueNode->type->__toString() !== 'void') { + return null; + } + + $phpDocInfo->removeByType(ReturnTagValueNode::class); + + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); + return $node; + } +} From 6e181f51561d0e82ce668aa7274160d9de5ca657 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 13 Jan 2026 15:23:24 +0100 Subject: [PATCH 2/5] rename to shorter RemoveVoidDocblockFromMagicMethodsRector --- .../Fixture/remove_return_construct.php.inc | 30 ------------------- .../Fixture/remove_return_destruct.php.inc | 30 ------------------- .../config/configured_rule.php | 9 ------ .../Fixture/remove_return_clone.php.inc | 4 +-- .../Fixture/remove_return_construct.php.inc | 30 +++++++++++++++++++ .../Fixture/remove_return_destruct.php.inc | 30 +++++++++++++++++++ ...oidDocblockFromMagicMethodsRectorTest.php} | 4 +-- .../config/configured_rule.php | 9 ++++++ ...oveVoidDocblockFromMagicMethodsRector.php} | 4 +-- 9 files changed, 75 insertions(+), 75 deletions(-) delete mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_construct.php.inc delete mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_destruct.php.inc delete mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/config/configured_rule.php rename rules-tests/DeadCode/Rector/ClassMethod/{RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector => RemoveVoidDocblockFromMagicMethodsRector}/Fixture/remove_return_clone.php.inc (53%) create mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_construct.php.inc create mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_destruct.php.inc rename rules-tests/DeadCode/Rector/ClassMethod/{RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest.php => RemoveVoidDocblockFromMagicMethodsRector/RemoveVoidDocblockFromMagicMethodsRectorTest.php} (71%) create mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/config/configured_rule.php rename rules/DeadCode/Rector/ClassMethod/{RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php => RemoveVoidDocblockFromMagicMethodsRector.php} (90%) diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_construct.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_construct.php.inc deleted file mode 100644 index 40f336f6e41..00000000000 --- a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_construct.php.inc +++ /dev/null @@ -1,30 +0,0 @@ - ------ - diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_destruct.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_destruct.php.inc deleted file mode 100644 index 7f255f19cac..00000000000 --- a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_destruct.php.inc +++ /dev/null @@ -1,30 +0,0 @@ - ------ - diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/config/configured_rule.php b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/config/configured_rule.php deleted file mode 100644 index 3d488b9ecba..00000000000 --- a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/config/configured_rule.php +++ /dev/null @@ -1,9 +0,0 @@ -withRules([RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector::class]); diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_clone.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_clone.php.inc similarity index 53% rename from rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_clone.php.inc rename to rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_clone.php.inc index 97060bb77e6..21c509286cc 100644 --- a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_clone.php.inc +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_clone.php.inc @@ -1,6 +1,6 @@ +----- + diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_destruct.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_destruct.php.inc new file mode 100644 index 00000000000..d24cac42a37 --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_destruct.php.inc @@ -0,0 +1,30 @@ + +----- + diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest.php b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/RemoveVoidDocblockFromMagicMethodsRectorTest.php similarity index 71% rename from rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest.php rename to rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/RemoveVoidDocblockFromMagicMethodsRectorTest.php index 435f6b057f3..35b9e7d9733 100644 --- a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest.php +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/RemoveVoidDocblockFromMagicMethodsRectorTest.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Rector\Tests\DeadCode\Rector\ClassMethod\RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector; +namespace Rector\Tests\DeadCode\Rector\ClassMethod\RemoveVoidDocblockFromMagicMethodsRector; use Iterator; use PHPUnit\Framework\Attributes\DataProvider; use Rector\Testing\PHPUnit\AbstractRectorTestCase; -final class RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest extends AbstractRectorTestCase +final class RemoveVoidDocblockFromMagicMethodsRectorTest extends AbstractRectorTestCase { #[DataProvider('provideData')] public function test(string $filePath): void diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/config/configured_rule.php b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/config/configured_rule.php new file mode 100644 index 00000000000..9de52f0fc8f --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/config/configured_rule.php @@ -0,0 +1,9 @@ +withRules([RemoveVoidDocblockFromMagicMethodsRector::class]); diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector.php similarity index 90% rename from rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php rename to rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector.php index 6df944b214a..342da8d17eb 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector.php @@ -15,9 +15,9 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Tests\DeadCode\Rector\ClassMethod\RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector\RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRectorTest + * @see \Rector\Tests\DeadCode\Rector\ClassMethod\RemoveVoidDocblockFromMagicMethodsRector\RemoveVoidDocblockFromMagicMethodsRectorTest */ -final class RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector extends AbstractRector +final class RemoveVoidDocblockFromMagicMethodsRector extends AbstractRector { public function __construct( private readonly DocBlockUpdater $docBlockUpdater, From d8952ae3a0b41db7acd8d03955b9b3fd42491d5b Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 13 Jan 2026 15:27:35 +0100 Subject: [PATCH 3/5] singular, register in dead-code level --- .../Fixture/remove_return_clone.php.inc | 4 ++-- .../Fixture/remove_return_construct.php.inc | 4 ++-- .../Fixture/remove_return_destruct.php.inc | 4 ++-- .../RemoveVoidDocblockFromMagicMethodRectorTest.php} | 4 ++-- .../config/configured_rule.php | 4 ++-- ...Rector.php => RemoveVoidDocblockFromMagicMethodRector.php} | 4 ++-- src/Config/Level/DeadCodeLevel.php | 2 ++ src/PhpParser/Node/BetterNodeFinder.php | 2 +- 8 files changed, 15 insertions(+), 13 deletions(-) rename rules-tests/DeadCode/Rector/ClassMethod/{RemoveVoidDocblockFromMagicMethodsRector => RemoveVoidDocblockFromMagicMethodRector}/Fixture/remove_return_clone.php.inc (84%) rename rules-tests/DeadCode/Rector/ClassMethod/{RemoveVoidDocblockFromMagicMethodsRector => RemoveVoidDocblockFromMagicMethodRector}/Fixture/remove_return_construct.php.inc (82%) rename rules-tests/DeadCode/Rector/ClassMethod/{RemoveVoidDocblockFromMagicMethodsRector => RemoveVoidDocblockFromMagicMethodRector}/Fixture/remove_return_destruct.php.inc (82%) rename rules-tests/DeadCode/Rector/ClassMethod/{RemoveVoidDocblockFromMagicMethodsRector/RemoveVoidDocblockFromMagicMethodsRectorTest.php => RemoveVoidDocblockFromMagicMethodRector/RemoveVoidDocblockFromMagicMethodRectorTest.php} (83%) rename rules-tests/DeadCode/Rector/ClassMethod/{RemoveVoidDocblockFromMagicMethodsRector => RemoveVoidDocblockFromMagicMethodRector}/config/configured_rule.php (65%) rename rules/DeadCode/Rector/ClassMethod/{RemoveVoidDocblockFromMagicMethodsRector.php => RemoveVoidDocblockFromMagicMethodRector.php} (94%) diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_clone.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector/Fixture/remove_return_clone.php.inc similarity index 84% rename from rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_clone.php.inc rename to rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector/Fixture/remove_return_clone.php.inc index 21c509286cc..b8aaca18b6b 100644 --- a/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector/Fixture/remove_return_clone.php.inc +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector/Fixture/remove_return_clone.php.inc @@ -1,6 +1,6 @@ withRules([RemoveVoidDocblockFromMagicMethodsRector::class]); + ->withRules([RemoveVoidDocblockFromMagicMethodRector::class]); diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector.php similarity index 94% rename from rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector.php rename to rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector.php index 342da8d17eb..819d5e74037 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodsRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector.php @@ -15,9 +15,9 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Tests\DeadCode\Rector\ClassMethod\RemoveVoidDocblockFromMagicMethodsRector\RemoveVoidDocblockFromMagicMethodsRectorTest + * @see \Rector\Tests\DeadCode\Rector\ClassMethod\RemoveVoidDocblockFromMagicMethodRector\RemoveVoidDocblockFromMagicMethodRectorTest */ -final class RemoveVoidDocblockFromMagicMethodsRector extends AbstractRector +final class RemoveVoidDocblockFromMagicMethodRector extends AbstractRector { public function __construct( private readonly DocBlockUpdater $docBlockUpdater, diff --git a/src/Config/Level/DeadCodeLevel.php b/src/Config/Level/DeadCodeLevel.php index a9f41f9e398..e59264dae1a 100644 --- a/src/Config/Level/DeadCodeLevel.php +++ b/src/Config/Level/DeadCodeLevel.php @@ -27,6 +27,7 @@ use Rector\DeadCode\Rector\ClassMethod\RemoveUselessParamTagRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUselessReturnExprInConstructRector; use Rector\DeadCode\Rector\ClassMethod\RemoveUselessReturnTagRector; +use Rector\DeadCode\Rector\ClassMethod\RemoveVoidDocblockFromMagicMethodRector; use Rector\DeadCode\Rector\Closure\RemoveUnusedClosureVariableUseRector; use Rector\DeadCode\Rector\Concat\RemoveConcatAutocastRector; use Rector\DeadCode\Rector\ConstFetch\RemovePhpVersionIdCheckRector; @@ -109,6 +110,7 @@ final class DeadCodeLevel RemoveDeadZeroAndOneOperationRector::class, // docblock + RemoveVoidDocblockFromMagicMethodRector::class, RemoveUselessParamTagRector::class, RemoveUselessReturnTagRector::class, RemoveUselessReadOnlyTagRector::class, diff --git a/src/PhpParser/Node/BetterNodeFinder.php b/src/PhpParser/Node/BetterNodeFinder.php index 631c06763bf..a69e404fb79 100644 --- a/src/PhpParser/Node/BetterNodeFinder.php +++ b/src/PhpParser/Node/BetterNodeFinder.php @@ -4,7 +4,6 @@ namespace Rector\PhpParser\Node; -use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Expr\Yield_; @@ -12,6 +11,7 @@ use PhpParser\Node\FunctionLike; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Class_; +use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; use PhpParser\NodeFinder; use PhpParser\NodeVisitor; From 1cc7edaed7b0e73dfc01a3e1c3efe04845f2904a Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 13 Jan 2026 15:45:22 +0100 Subject: [PATCH 4/5] combine if --- .../Rector/If_/RemoveDeadIfBlockRector.php | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/rules/DeadCode/Rector/If_/RemoveDeadIfBlockRector.php b/rules/DeadCode/Rector/If_/RemoveDeadIfBlockRector.php index 87456f68511..5240e01f930 100644 --- a/rules/DeadCode/Rector/If_/RemoveDeadIfBlockRector.php +++ b/rules/DeadCode/Rector/If_/RemoveDeadIfBlockRector.php @@ -7,6 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; use PhpParser\Node\Stmt\Else_; +use PhpParser\Node\Stmt\ElseIf_; use PhpParser\Node\Stmt\If_; use PhpParser\NodeVisitor; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; @@ -100,16 +101,16 @@ public function refactor(Node $node): int|null|If_ return $this->refactor($node) ?? $node; } - if ($node->elseifs !== []) { - foreach ($node->elseifs as $elseif) { - $keep_elseifs = array_filter( - $node->elseifs, - fn ($elseif) => $elseif->stmts !== [] || $this->sideEffectNodeDetector->detect($elseif->cond) - ); - if (count($node->elseifs) !== count($keep_elseifs)) { - $node->elseifs = $keep_elseifs; - return $this->refactor($node) ?? $node; - } + foreach ($node->elseifs as $elseif) { + $keep_elseifs = array_filter( + $node->elseifs, + fn (ElseIf_ $elseif): bool => $elseif->stmts !== [] || $this->sideEffectNodeDetector->detect( + $elseif->cond + ) + ); + if (count($node->elseifs) !== count($keep_elseifs)) { + $node->elseifs = $keep_elseifs; + return $this->refactor($node) ?? $node; } } @@ -141,6 +142,7 @@ public function refactor(Node $node): int|null|If_ if (count($node->elseifs) > 1) { $if->elseifs = \array_slice($node->elseifs, 1); } + return $this->refactor($if) ?? $if; } From 8e5c807833c19b73fddb217273d936d02a74804f Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 13 Jan 2026 15:50:15 +0100 Subject: [PATCH 5/5] misc --- .../RemoveVoidDocblockFromMagicMethodRector.php | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector.php index 819d5e74037..30b88b28329 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveVoidDocblockFromMagicMethodRector.php @@ -11,6 +11,7 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Comments\NodeDocBlock\DocBlockUpdater; use Rector\Rector\AbstractRector; +use Rector\ValueObject\MethodName; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -80,18 +81,13 @@ public function refactor(Node $node): ?Node return null; } - $magicMethodNames = ['__construct', '__destruct', '__clone']; - - $methodName = $this->getName($node); - - if (! in_array($methodName, $magicMethodNames, true)) { + if (! $this->isNames($node, [MethodName::CONSTRUCT, MethodName::DESTRUCT, MethodName::CLONE])) { return null; } $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); $returnTagValueNode = $phpDocInfo->getReturnTagValue(); - if (! $returnTagValueNode instanceof ReturnTagValueNode) { return null; } @@ -100,7 +96,7 @@ public function refactor(Node $node): ?Node return null; } - if (! $returnTagValueNode->type instanceof IdentifierTypeNode || $returnTagValueNode->type->__toString() !== 'void') { + if (! $returnTagValueNode->type instanceof IdentifierTypeNode || $returnTagValueNode->type->name !== 'void') { return null; }