Skip to content

Commit a72c622

Browse files
[DeadCode] Skip with elseif/else on RemoveNextSameValueConditionRector (#7809)
* [DeadCode] Skip with elseif/else on RemoveNextSameValueConditionRector * [ci-review] Rector Rectify * [ci-review] Rector Rectify --------- Co-authored-by: GitHub Action <[email protected]>
1 parent ed60a22 commit a72c622

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Rector\Tests\DeadCode\Rector\Stmt\RemoveNextSameValueConditionRector\Fixture;
4+
5+
final class SkipWithElseif
6+
{
7+
public function __construct(array $items)
8+
{
9+
$count = 100;
10+
if ($items === []) {
11+
$count = 0;
12+
}
13+
14+
if ($items === []) {
15+
return $count;
16+
} else {
17+
return 'test';
18+
}
19+
}
20+
}

rules/DeadCode/Rector/Stmt/RemoveNextSameValueConditionRector.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use PhpParser\Node;
88
use PhpParser\Node\Expr\Variable;
9+
use PhpParser\Node\Stmt\Else_;
910
use PhpParser\Node\Stmt\If_;
1011
use Rector\DeadCode\SideEffect\SideEffectNodeDetector;
1112
use Rector\PhpParser\Enum\NodeGroup;
@@ -90,6 +91,15 @@ public function refactor(Node $node): ?Node
9091
continue;
9192
}
9293

94+
// only when no elseif/else in current if
95+
if ($stmt->elseifs !== []) {
96+
continue;
97+
}
98+
99+
if ($stmt->else instanceof Else_) {
100+
continue;
101+
}
102+
93103
// first condition must be without side effect
94104
if ($this->sideEffectNodeDetector->detect($stmt->cond)) {
95105
continue;
@@ -108,6 +118,15 @@ public function refactor(Node $node): ?Node
108118
continue;
109119
}
110120

121+
// only when no elseif/else in next stmt
122+
if ($nextStmt->elseifs !== []) {
123+
continue;
124+
}
125+
126+
if ($nextStmt->else instanceof Else_) {
127+
continue;
128+
}
129+
111130
$stmt->stmts = array_merge($stmt->stmts, $nextStmt->stmts);
112131

113132
// remove next node

0 commit comments

Comments
 (0)