mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-26 00:32:41 +01:00
Improve undeclared variables linter rule
Summary: Currently `ArcanistUndeclaredVariableXHPASTLinterRule` does not properly handle anonymous closures. Test Plan: Added test cases. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: johnny-bit, Korvin Differential Revision: https://secure.phabricator.com/D13795
This commit is contained in:
parent
402899a9c3
commit
bf4e7d4ca8
2 changed files with 19 additions and 0 deletions
|
@ -172,6 +172,13 @@ function catchy() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function some_func($x, $y) {
|
||||||
|
$func = function($z) use ($x) {
|
||||||
|
echo $x;
|
||||||
|
echo $y;
|
||||||
|
echo $z;
|
||||||
|
};
|
||||||
|
}
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
error:28:3
|
error:28:3
|
||||||
error:30:3
|
error:30:3
|
||||||
|
@ -191,3 +198,4 @@ error:144:8
|
||||||
error:150:9
|
error:150:9
|
||||||
error:164:9
|
error:164:9
|
||||||
error:171:5
|
error:171:5
|
||||||
|
error:178:10
|
||||||
|
|
|
@ -164,6 +164,17 @@ final class ArcanistUndeclaredVariableXHPASTLinterRule
|
||||||
$scope_destroyed_at = min($scope_destroyed_at, $call->getOffset());
|
$scope_destroyed_at = min($scope_destroyed_at, $call->getOffset());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$func_decls = $body->selectDescendantsOfType('n_FUNCTION_DECLARATION');
|
||||||
|
foreach ($func_decls as $func_decl) {
|
||||||
|
if ($func_decl->getChildByIndex(2)->getTypeName() != 'n_EMPTY') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($func_decl->selectDescendantsOfType('n_VARIABLE') as $var) {
|
||||||
|
$exclude_tokens[$var->getID()] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Now we have every declaration except foreach(), handled below. Build
|
// Now we have every declaration except foreach(), handled below. Build
|
||||||
// two maps, one which just keeps track of which tokens are part of
|
// two maps, one which just keeps track of which tokens are part of
|
||||||
// declarations ($declaration_tokens) and one which has the first offset
|
// declarations ($declaration_tokens) and one which has the first offset
|
||||||
|
|
Loading…
Reference in a new issue