Refactor findVariableDefinitionsInNode to simplify and avoid closure use
parent
260969b3be
commit
f144ca7c26
|
@ -400,25 +400,17 @@ class CompletionProvider
|
|||
$vars = [];
|
||||
// If the child node is a variable assignment, save it
|
||||
|
||||
$isAssignmentToVariable = function ($node) use ($namePrefix) {
|
||||
return $node instanceof Node\Expression\AssignmentExpression
|
||||
&& $node->leftOperand instanceof Node\Expression\Variable
|
||||
&& (empty($namePrefix) || strpos($node->leftOperand->getName(), $namePrefix) !== false);
|
||||
};
|
||||
$isNotFunctionLike = function ($node) {
|
||||
return !(
|
||||
ParserHelpers::isFunctionLike($node) ||
|
||||
$node instanceof Node\Statement\ClassDeclaration ||
|
||||
$node instanceof Node\Statement\InterfaceDeclaration ||
|
||||
$node instanceof Node\Statement\TraitDeclaration
|
||||
);
|
||||
$isAssignmentToVariable = function ($node) {
|
||||
return $node instanceof Node\Expression\AssignmentExpression;
|
||||
};
|
||||
|
||||
if ($isAssignmentToVariable($node)) {
|
||||
if ($this->isAssignmentToVariableWithPrefix($node, $namePrefix)) {
|
||||
$vars[] = $node->leftOperand;
|
||||
} else {
|
||||
foreach ($node->getDescendantNodes($isNotFunctionLike) as $descendantNode) {
|
||||
if ($isAssignmentToVariable($descendantNode)) {
|
||||
// Get all descendent variables, then filter to ones that start with $namePrefix.
|
||||
// Avoiding closure usage in tight loop
|
||||
foreach ($node->getDescendantNodes($isAssignmentToVariable) as $descendantNode) {
|
||||
if ($this->isAssignmentToVariableWithPrefix($descendantNode, $namePrefix)) {
|
||||
$vars[] = $descendantNode->leftOperand;
|
||||
}
|
||||
}
|
||||
|
@ -426,4 +418,11 @@ class CompletionProvider
|
|||
|
||||
return $vars;
|
||||
}
|
||||
|
||||
private function isAssignmentToVariableWithPrefix($node, $namePrefix)
|
||||
{
|
||||
return $node instanceof Node\Expression\AssignmentExpression
|
||||
&& $node->leftOperand instanceof Node\Expression\Variable
|
||||
&& (empty($namePrefix) || strpos($node->leftOperand->getName(), $namePrefix) !== false);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue