Skip to content

Commit 62b698d

Browse files
committed
add addNextStatement() and getNextStatements() method
1 parent b3be0cc commit 62b698d

File tree

3 files changed

+34
-10
lines changed

3 files changed

+34
-10
lines changed

src/Analyser/NodeScopeResolver.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,15 @@ public function processNodes(
309309

310310
$alreadyTerminated = true;
311311
$nextStmts = $this->getNextUnreachableStatements(array_slice($nodes, $i + 1), true);
312+
$unreachableStatementNode = null;
312313
foreach ($nextStmts as $nextStmt) {
313-
$nodeCallback(new UnreachableStatementNode($nextStmt), $scope);
314+
if ($unreachableStatementNode instanceof UnreachableStatementNode) {
315+
$unreachableStatementNode->addNextStatement($nextStmt);
316+
continue;
317+
}
318+
319+
$unreachableStatementNode = new UnreachableStatementNode($nextStmt);
320+
$nodeCallback($unreachableStatementNode, $scope);
314321
}
315322
}
316323
}
@@ -399,8 +406,16 @@ public function processStmtNodes(
399406

400407
$alreadyTerminated = true;
401408
$nextStmts = $this->getNextUnreachableStatements(array_slice($stmts, $i + 1), $parentNode instanceof Node\Stmt\Namespace_);
409+
410+
$unreachableStatementNode = null;
402411
foreach ($nextStmts as $nextStmt) {
403-
$nodeCallback(new UnreachableStatementNode($nextStmt), $scope);
412+
if ($unreachableStatementNode instanceof UnreachableStatementNode) {
413+
$unreachableStatementNode->addNextStatement($nextStmt);
414+
continue;
415+
}
416+
417+
$unreachableStatementNode = new UnreachableStatementNode($nextStmt);
418+
$nodeCallback($unreachableStatementNode, $scope);
404419
}
405420
}
406421

src/Node/UnreachableStatementNode.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
*/
1010
final class UnreachableStatementNode extends Stmt implements VirtualNode
1111
{
12+
/**
13+
* @var Stmt[]
14+
*/
15+
private array $nextStatements = [];
1216

1317
public function __construct(private Stmt $originalStatement)
1418
{
@@ -33,4 +37,17 @@ public function getSubNodeNames(): array
3337
return [];
3438
}
3539

40+
public function addNextStatement(Stmt $stmt): void
41+
{
42+
$this->nextStatements[] = $stmt;
43+
}
44+
45+
/**
46+
* @return Stmt[]
47+
*/
48+
public function getNextStatements(): array
49+
{
50+
return $this->nextStatements;
51+
}
52+
3653
}

tests/PHPStan/Rules/DeadCode/UnreachableStatementRuleTest.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -238,14 +238,6 @@ public function testMultipleUnreachable(): void
238238
'Unreachable statement - code above always terminates.',
239239
12,
240240
],
241-
[
242-
'Unreachable statement - code above always terminates.',
243-
13,
244-
],
245-
[
246-
'Unreachable statement - code above always terminates.',
247-
14,
248-
],
249241
]);
250242
}
251243

0 commit comments

Comments
 (0)