diff --git a/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php b/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php index 6bdcfa93..0341e778 100644 --- a/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php +++ b/VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php @@ -537,12 +537,16 @@ protected function checkForForeachLoopVar(File $phpcsFile, $stackPtr, $varName, $token = $tokens[$stackPtr]; // Are we a foreach loopvar? - $openPtr = Helpers::findContainingOpeningBracket($phpcsFile, $stackPtr); + $lastStatementPtr = $phpcsFile->findPrevious(T_SEMICOLON, $stackPtr); + if ($lastStatementPtr === false) { + $lastStatementPtr = 0; + } + $openPtr = $phpcsFile->findPrevious(T_FOREACH, $stackPtr, $lastStatementPtr); if ($openPtr === false) { return false; } - // Is there an 'as' token between us and the opening bracket? + // Is there an 'as' token between us and the foreach? if ($phpcsFile->findPrevious(T_AS, $stackPtr - 1, $openPtr) === false) { return false; } diff --git a/VariableAnalysis/Tests/CodeAnalysis/fixtures/FunctionWithForeachFixture.php b/VariableAnalysis/Tests/CodeAnalysis/fixtures/FunctionWithForeachFixture.php index c0cc3d9b..ef3c43ee 100644 --- a/VariableAnalysis/Tests/CodeAnalysis/fixtures/FunctionWithForeachFixture.php +++ b/VariableAnalysis/Tests/CodeAnalysis/fixtures/FunctionWithForeachFixture.php @@ -54,3 +54,15 @@ function function_with_defined_foreach() { foreach ($array as $key4 => &$value4) { } } + +$data = [ + ['foo', 'Foo'], + ['bar', 'Bar'], + +]; +foreach ($data as $val) { + echo json_encode($val); +} +foreach ($data as list($name, $label)) { + printf('