Skip to content

Commit 15589b5

Browse files
authored
Fix false-positive unused variable (#17)
Close #16
1 parent 38502e6 commit 15589b5

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

lib/UnusedVariableRule.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55
namespace SlamPhpStan;
66

77
use PhpParser\Node;
8-
use PhpParser\Node\Expr\ArrayDimFetch;
98
use PhpParser\Node\Expr\Assign;
109
use PhpParser\Node\Expr\Closure;
11-
use PhpParser\Node\Expr\PropertyFetch;
1210
use PhpParser\Node\Expr\Variable;
1311
use PhpParser\Node\FunctionLike;
1412
use PhpParser\Node\Scalar\String_;
@@ -96,15 +94,16 @@ private function gatherVariablesUsage(Node $node, array & $unusedVariables, arra
9694
if (\is_string($node->var->name) && ! isset($parameters[$node->var->name]) && ! isset(self::$globalVariables[$node->var->name])) {
9795
$unusedVariables[$node->var->name] = $node->var;
9896
}
99-
} elseif ($node->var instanceof PropertyFetch) {
100-
$this->gatherVariablesUsage($node->var->var, $unusedVariables, $usedVariables, $parameters);
101-
} elseif ($node->var instanceof ArrayDimFetch) {
102-
if ($node->var->var instanceof Node) {
97+
} else {
98+
if (\property_exists($node->var, 'var') && $node->var->var instanceof Node) {
10399
$this->gatherVariablesUsage($node->var->var, $unusedVariables, $usedVariables, $parameters);
104100
}
105-
if ($node->var->dim instanceof Node) {
101+
if (\property_exists($node->var, 'dim') && $node->var->dim instanceof Node) {
106102
$this->gatherVariablesUsage($node->var->dim, $unusedVariables, $usedVariables, $parameters);
107103
}
104+
if (\property_exists($node->var, 'name') && $node->var->name instanceof Node) {
105+
$this->gatherVariablesUsage($node->var->name, $unusedVariables, $usedVariables, $parameters);
106+
}
108107
}
109108
}
110109
if ($node instanceof Variable) {

tests/TestAsset/UnusedVariableRule/fixture.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,26 @@ function foo($ref)
7777
$GLOBALS = null;
7878
}
7979

80+
class Test
81+
{
82+
function foo(array $numVals)
83+
{
84+
$arr = [
85+
"1" => "propOne",
86+
"2" => "propTwo",
87+
];
88+
89+
foreach ($numVals as $num => $v) {
90+
$key = $arr[$num];
91+
$this->{$key} = $v;
92+
93+
$key2 = $arr[$num];
94+
$this->{$key2}();
95+
96+
$this->key = 1;
97+
$this->key2();
98+
}
99+
}
100+
}
101+
80102
$outsideFunctionVar = 1;

0 commit comments

Comments
 (0)