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..5a8caaf7dea --- /dev/null +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUselessVoidReturnFromDocblockVoidMagicMethodsRector.php @@ -0,0 +1,112 @@ +getName($node); + + if (! in_array($methodName, $magicMethodNames, true)) { + return null; + } + + $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); + + $returnTagValueNode = $phpDocInfo->getReturnTagValue(); + + $phpDocNodeTraverser = new PhpDocNodeTraverser(); + $phpDocNodeTraverser->traverseWithCallable( + $phpDocInfo->getPhpDocNode(), + '', + function (AstNode $astNode) use ($returnTagValueNode): ?int { + if (! $astNode instanceof PhpDocTagNode) { + return null; + } + + if ($astNode->value === $returnTagValueNode) { + return PhpDocNodeTraverser::NODE_REMOVE; + } + + return null; + } + ); + + $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node); + return $node; + } +}