Refactor findVariableDefinitionsInNode to simplify and avoid closure use
parent
260969b3be
commit
f144ca7c26
|
@ -400,25 +400,17 @@ class CompletionProvider
|
||||||
$vars = [];
|
$vars = [];
|
||||||
// If the child node is a variable assignment, save it
|
// If the child node is a variable assignment, save it
|
||||||
|
|
||||||
$isAssignmentToVariable = function ($node) use ($namePrefix) {
|
$isAssignmentToVariable = function ($node) {
|
||||||
return $node instanceof Node\Expression\AssignmentExpression
|
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
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if ($isAssignmentToVariable($node)) {
|
if ($this->isAssignmentToVariableWithPrefix($node, $namePrefix)) {
|
||||||
$vars[] = $node->leftOperand;
|
$vars[] = $node->leftOperand;
|
||||||
} else {
|
} else {
|
||||||
foreach ($node->getDescendantNodes($isNotFunctionLike) as $descendantNode) {
|
// Get all descendent variables, then filter to ones that start with $namePrefix.
|
||||||
if ($isAssignmentToVariable($descendantNode)) {
|
// Avoiding closure usage in tight loop
|
||||||
|
foreach ($node->getDescendantNodes($isAssignmentToVariable) as $descendantNode) {
|
||||||
|
if ($this->isAssignmentToVariableWithPrefix($descendantNode, $namePrefix)) {
|
||||||
$vars[] = $descendantNode->leftOperand;
|
$vars[] = $descendantNode->leftOperand;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -426,4 +418,11 @@ class CompletionProvider
|
||||||
|
|
||||||
return $vars;
|
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