Skip to content

Commit 43713f0

Browse files
authored
Merge pull request #16 from sirbrillig/fix/argument-assign-scope
Fix inline assign and access
2 parents e666bc0 + 10c728b commit 43713f0

File tree

2 files changed

+15
-12
lines changed

2 files changed

+15
-12
lines changed

VariableAnalysis/Sniffs/CodeAnalysis/VariableAnalysisSniff.php

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -566,26 +566,22 @@ protected function findWhereAssignExecuted(
566566
// the closing bracket, if that's first.
567567
// eg: echo (($var = 12) && ($var == 12));
568568
$semicolonPtr = $phpcsFile->findNext(T_SEMICOLON, $stackPtr + 1, null, false, null, true);
569+
$commaPtr = $phpcsFile->findNext(T_COMMA, $stackPtr + 1, null, false, null, true);
569570
$closePtr = false;
570571
if (($openPtr = $this->findContainingBrackets($phpcsFile, $stackPtr)) !== false) {
571572
if (isset($tokens[$openPtr]['parenthesis_closer'])) {
572573
$closePtr = $tokens[$openPtr]['parenthesis_closer'];
573574
}
574575
}
575576

576-
if ($semicolonPtr === false) {
577-
if ($closePtr === false) {
578-
// TODO: panic
579-
return $stackPtr;
580-
}
581-
return $closePtr;
582-
}
583-
584-
if ($closePtr < $semicolonPtr) {
585-
return $closePtr;
577+
// Return the first thing: comma, semicolon, close-bracket, or stackPtr if nothing else
578+
$assignEndTokens = [$commaPtr, $semicolonPtr, $closePtr];
579+
$assignEndTokens = array_filter($assignEndTokens); // remove false values
580+
sort($assignEndTokens);
581+
if (empty($assignEndTokens)) {
582+
return $stackPtr;
586583
}
587-
588-
return $semicolonPtr;
584+
return $assignEndTokens[0];
589585
}
590586

591587
protected function findContainingBrackets(

VariableAnalysis/Tests/CodeAnalysis/fixtures/FunctionWithInlineAssignFixture.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,10 @@ function function_with_inline_assigns() {
99
}
1010
echo $var2;
1111
}
12+
13+
function function_with_assigns_and_usage() {
14+
doSomething(
15+
$foo = 'bar',
16+
$foo
17+
);
18+
}

0 commit comments

Comments
 (0)