mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-22 06:42: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:30:3
|
||||
|
@ -191,3 +198,4 @@ error:144:8
|
|||
error:150:9
|
||||
error:164:9
|
||||
error:171:5
|
||||
error:178:10
|
||||
|
|
|
@ -164,6 +164,17 @@ final class ArcanistUndeclaredVariableXHPASTLinterRule
|
|||
$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
|
||||
// two maps, one which just keeps track of which tokens are part of
|
||||
// declarations ($declaration_tokens) and one which has the first offset
|
||||
|
|
Loading…
Reference in a new issue