From 29995403896ff25fe08c44a60e2921ac0e6a419c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20Hansl=C3=ADk?= Date: Wed, 13 May 2020 16:51:36 +0200 Subject: [PATCH] EarlyExitSniff: Fixed false positive --- .../Sniffs/ControlStructures/EarlyExitSniff.php | 9 +++++---- .../ControlStructures/data/earlyExitNoErrors.php | 11 +++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/SlevomatCodingStandard/Sniffs/ControlStructures/EarlyExitSniff.php b/SlevomatCodingStandard/Sniffs/ControlStructures/EarlyExitSniff.php index f988fb911..71afe6933 100644 --- a/SlevomatCodingStandard/Sniffs/ControlStructures/EarlyExitSniff.php +++ b/SlevomatCodingStandard/Sniffs/ControlStructures/EarlyExitSniff.php @@ -11,6 +11,7 @@ use SlevomatCodingStandard\Helpers\TokenHelper; use Throwable; use function array_key_exists; +use function count; use function in_array; use function range; use function sort; @@ -106,6 +107,10 @@ private function processElse(File $phpcsFile, int $elsePointer): void continue; } + if (count($allConditionsPointers) > 2 && $conditionEarlyExitPointer === null) { + return; + } + $previousConditionPointer = $conditionPointer; $previousConditionEarlyExitPointer = $conditionEarlyExitPointer; @@ -113,10 +118,6 @@ private function processElse(File $phpcsFile, int $elsePointer): void $ifEarlyExitPointer = $conditionEarlyExitPointer; continue; } - - if ($conditionEarlyExitPointer === null) { - return; - } } if ($ifEarlyExitPointer === null && $elseEarlyExitPointer === null) { diff --git a/tests/Sniffs/ControlStructures/data/earlyExitNoErrors.php b/tests/Sniffs/ControlStructures/data/earlyExitNoErrors.php index 87c8ecf5e..3fdc85473 100644 --- a/tests/Sniffs/ControlStructures/data/earlyExitNoErrors.php +++ b/tests/Sniffs/ControlStructures/data/earlyExitNoErrors.php @@ -207,3 +207,14 @@ function nestedIfWhenOneBranchDoesNotHaveEarlyExit($a, $b) doElse(); } }; + +function oneConditionWithoutEarlyExitWithElse() +{ + if (true) { + doAnything(); + } elseif (false) { + return; + } else { + throw new \Exception(''); + } +};