diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_clone.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_clone.php.inc new file mode 100644 index 00000000000..eb15e0cf7fc --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_clone.php.inc @@ -0,0 +1,30 @@ + +----- + diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_construct.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_construct.php.inc new file mode 100644 index 00000000000..a62e1e7ee6a --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_construct.php.inc @@ -0,0 +1,30 @@ + +----- + diff --git a/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_destruct.php.inc b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_destruct.php.inc new file mode 100644 index 00000000000..55fdd9e6d25 --- /dev/null +++ b/rules-tests/DeadCode/Rector/ClassMethod/RemoveUselessReturnTagRector/Fixture/remove_return_destruct.php.inc @@ -0,0 +1,30 @@ + +----- + diff --git a/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php b/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php index e55e247c9e1..e4a0f4846cd 100644 --- a/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php +++ b/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php @@ -42,6 +42,10 @@ public function isDead(ReturnTagValueNode $returnTagValueNode, ClassMethod|Funct { $returnType = $functionLike->getReturnType(); + if ($this->isVoidMagicMethod($functionLike)) { + return true; + } + if ($returnType === null) { return false; } @@ -94,6 +98,17 @@ public function isDead(ReturnTagValueNode $returnTagValueNode, ClassMethod|Funct return ! $this->hasTrueFalsePseudoType($returnTagValueNode->type); } + public function isVoidMagicMethod(ClassMethod|Function_ $functionLike): bool + { + $voidMagicMethods = ['__construct', '__destruct', '__clone']; + + return $functionLike instanceof ClassMethod && in_array( + $functionLike->name->toString(), + $voidMagicMethods, + true + ); + } + private function isVoidReturnType(Node $node): bool { return $node instanceof Identifier && $node->toString() === 'void';