From 11b94117e5e915866695379b12dbb5cab0f90b79 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 19 May 2023 20:44:48 +0700 Subject: [PATCH] [Parser] Handle just removed stmt on BetterNodeFinder::resolveNodeFromFile() as fall for get next stmt (#3897) * [Parser] Handle just removed stmt on BetterNodeFinder::resolveNodeFromFile() as fall for get next stmt * clean up --- src/PhpParser/Node/BetterNodeFinder.php | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/PhpParser/Node/BetterNodeFinder.php b/src/PhpParser/Node/BetterNodeFinder.php index c972fce1417..5a5329846e1 100644 --- a/src/PhpParser/Node/BetterNodeFinder.php +++ b/src/PhpParser/Node/BetterNodeFinder.php @@ -664,7 +664,28 @@ private function resolveNodeFromFile(array $newStmts, Node $node, bool $isPrevio $currentStmtKey = $node->getAttribute(AttributeKey::STMT_KEY); $stmtKey = $isPrevious ? $currentStmtKey - 1 : $currentStmtKey + 1; - return $newStmts[$stmtKey] ?? null; + if ($isPrevious) { + return $newStmts[$stmtKey] ?? null; + } + + if (! isset($newStmts[$currentStmtKey - 1])) { + return $newStmts[$stmtKey] ?? null; + } + + $startTokenPos = $node->getStartTokenPos(); + if ($newStmts[$currentStmtKey - 1]->getStartTokenPos() !== $startTokenPos) { + return $newStmts[$stmtKey] ?? null; + } + + if (! isset($newStmts[$currentStmtKey])) { + return null; + } + + if ($newStmts[$currentStmtKey]->getStartTokenPos() === $startTokenPos) { + return null; + } + + return $newStmts[$currentStmtKey]; } /**