From 0238d25bc632dfd93a1a8de7db9a8a8355f85ca1 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 6 Oct 2023 09:44:37 +0700 Subject: [PATCH 1/2] [CodeQuality] Skip spaced elseif cond on CompleteMissingIfElseBracketRector --- .../Fixture/skip_spaced_elseif_cond.php.inc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector/Fixture/skip_spaced_elseif_cond.php.inc diff --git a/rules-tests/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector/Fixture/skip_spaced_elseif_cond.php.inc b/rules-tests/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector/Fixture/skip_spaced_elseif_cond.php.inc new file mode 100644 index 00000000000..ac68fa901e8 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector/Fixture/skip_spaced_elseif_cond.php.inc @@ -0,0 +1,19 @@ + Date: Fri, 6 Oct 2023 09:48:14 +0700 Subject: [PATCH 2/2] Fixed :tada: --- .../CompleteMissingIfElseBracketRector.php | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php b/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php index 0d98f1417a7..2aaefaa3810 100644 --- a/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php +++ b/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php @@ -67,7 +67,7 @@ public function refactor(Node $node): ?Node } $oldTokens = $this->file->getOldTokens(); - if ($this->shouldSkip($node, $oldTokens)) { + if ($this->isIfConditionFollowedByOpeningCurlyBracket($node, $oldTokens)) { return null; } @@ -80,10 +80,28 @@ public function refactor(Node $node): ?Node /** * @param mixed[] $oldTokens */ - private function shouldSkip(If_|ElseIf_|Else_ $if, array $oldTokens): bool + private function isIfConditionFollowedByOpeningCurlyBracket(If_|ElseIf_|Else_ $if, array $oldTokens): bool { for ($i = $if->getStartTokenPos(); $i < $if->getEndTokenPos(); ++$i) { - if ($oldTokens[$i] === ';') { + if ($oldTokens[$i] !== ')') { + if ($oldTokens[$i] === ';') { + // all good + return true; + } + + continue; + } + + // first closing bracket must be followed by curly opening brackets + // what is next token? + $nextToken = $oldTokens[$i + 1]; + + if (is_array($nextToken) && trim((string) $nextToken[1]) === '') { + // next token is whitespace + $nextToken = $oldTokens[$i + 2]; + } + + if (in_array($nextToken, ['{', ':'], true)) { // all good return true; }