[DeadCode] Clean casted CallLike in Assign Expr on RemoveUnusedVariableAssignRector (#1889)

Co-authored-by: Jack Leigh <leighman@users.noreply.github.com>
This commit is contained in:
Abdul Malik Ikhsan 2022-03-02 17:02:22 +07:00 committed by GitHub
parent 7c00e0ab4b
commit 0cac723079
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 1 deletions

View File

@ -0,0 +1,31 @@
<?php
namespace Rector\Tests\DeadCode\Rector\Assign\RemoveUnusedVariableAssignRector\Fixture;
final class CleanCastAssignExprCallLike
{
public function run()
{
$response = (object) $this->api_post("whatever", []);
return 5;
}
}
?>
-----
<?php
namespace Rector\Tests\DeadCode\Rector\Assign\RemoveUnusedVariableAssignRector\Fixture;
final class CleanCastAssignExprCallLike
{
public function run()
{
$this->api_post("whatever", []);
return 5;
}
}
?>

View File

@ -8,6 +8,7 @@ use PhpParser\Node;
use PhpParser\Node\Arg;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\Cast;
use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\New_;
@ -109,13 +110,23 @@ CODE_SAMPLE
if ($this->hasCallLikeInAssignExpr($node->expr)) {
// keep the expr, can have side effect
return $node->expr;
return $this->cleanCastedExpr($node->expr);
}
$this->removeNode($node);
return $node;
}
private function cleanCastedExpr(Expr $expr): Expr
{
if (! $expr instanceof Cast) {
return $expr;
}
$castedExpr = $expr->expr;
return $this->cleanCastedExpr($castedExpr);
}
private function hasCallLikeInAssignExpr(Expr $expr): bool
{
return (bool) $this->betterNodeFinder->findFirst(