From 4b9d483c72ca3a2b7303e644d458543c0b5d6c15 Mon Sep 17 00:00:00 2001 From: Paul Rijke Date: Fri, 28 Nov 2025 08:41:29 +0100 Subject: [PATCH] feature: add handling for void magic methods --- .../Fixture/remove_return_construct.php | 16 +++ .../Fixture/remove_return_clone.php.inc | 30 +++++ .../Fixture/remove_return_construct.php.inc | 30 +++++ .../Fixture/remove_return_destruct.php.inc | 30 +++++ ...FromDocblockVoidMagicMethodsRectorTest.php | 28 +++++ .../config/configured_rule.php | 8 ++ ...turnFromDocblockVoidMagicMethodsRector.php | 103 ++++++++++++++++++ 7 files changed, 245 insertions(+) create mode 100644 rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_construct.php 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/RemoveUselessReturnTagRector/Fixture/remove_return_construct.php b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_construct.php new file mode 100644 index 00000000000..9a05d058b06 --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_construct.php @@ -0,0 +1,16 @@ + 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..eb15e0cf7fc --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/Fixture/remove_return_clone.php.inc @@ -0,0 +1,30 @@ + +----- + 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..a62e1e7ee6a --- /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..55fdd9e6d25 --- /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..7611cd142a7 --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockOnVoidMagicMethodsRector/config/configured_rule.php @@ -0,0 +1,8 @@ +withRules([\Rector\DeadCode\Rector\ClassMethod\RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector::class]); diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php new file mode 100644 index 00000000000..9b4f4e3a859 --- /dev/null +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php @@ -0,0 +1,103 @@ +getName($node); + if (! in_array($methodName, $magicMethodNames, true)) { + return null; + } + + $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); + + $returnTagValueNode = $phpDocInfo->getReturnTagValue(); + if ($returnTagValueNode === null) { + return null; + } + + // Remove only if it's exactly @return void + $returnType = (string) $returnTagValueNode->type; + if (strtolower($returnType) !== 'void') { + return null; + } + + $phpDocInfo->removeByType(get_class($returnTagValueNode)); + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); + return $node; + } +}