From 14eb72c7bb6edc4a6e80c73c722f54465d947531 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 12 Feb 2024 21:49:34 +0700 Subject: [PATCH] [DeadCode] Handle used in assign return on RemoveUnusedPrivatePropertyRector (#5608) --- .../Fixture/used_in_assign_return.php.inc | 29 +++++++++++++++++++ .../RemoveUnusedPrivatePropertyRector.php | 12 ++++++-- 2 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 rules-tests/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector/Fixture/used_in_assign_return.php.inc diff --git a/rules-tests/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector/Fixture/used_in_assign_return.php.inc b/rules-tests/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector/Fixture/used_in_assign_return.php.inc new file mode 100644 index 00000000000..e91eeb3856b --- /dev/null +++ b/rules-tests/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector/Fixture/used_in_assign_return.php.inc @@ -0,0 +1,29 @@ +count = 2; + } +} + +?> +----- + diff --git a/rules/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector.php b/rules/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector.php index f62371ca6eb..690222f185c 100644 --- a/rules/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector.php +++ b/rules/DeadCode/Rector/Property/RemoveUnusedPrivatePropertyRector.php @@ -9,6 +9,7 @@ use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Property; +use PhpParser\Node\Stmt\Return_; use PhpParser\Node\Stmt\TraitUse; use PhpParser\NodeTraverser; use PHPStan\Analyser\Scope; @@ -155,8 +156,8 @@ private function shouldSkipClass(Class_ $class): bool private function removePropertyAssigns(Class_ $class, string $propertyName): void { - $this->traverseNodesWithCallable($class, function (Node $node) use ($class, $propertyName): ?int { - if (! $node instanceof Expression) { + $this->traverseNodesWithCallable($class, function (Node $node) use ($class, $propertyName): null|int|Return_ { + if (! $node instanceof Expression && ! $node instanceof Return_) { return null; } @@ -169,7 +170,12 @@ private function removePropertyAssigns(Class_ $class, string $propertyName): voi return null; } - return NodeTraverser::REMOVE_NODE; + if ($node instanceof Expression) { + return NodeTraverser::REMOVE_NODE; + } + + $node->expr = $node->expr->expr; + return $node; }); } }