From 591ecbd7d3c914b5e128779ca81c0ce3ba97e606 Mon Sep 17 00:00:00 2001 From: Sara Itani Date: Wed, 1 Mar 2017 15:55:29 -0800 Subject: [PATCH] Extract static FQN methods to FqnUtilities --- src/CompletionProvider.php | 2 +- src/DefinitionResolver.php | 27 +------------ src/FqnUtilities.php | 53 +++++++++++++++++++++++++ src/NodeVisitor/DefinitionCollector.php | 4 +- src/Server/TextDocument.php | 8 ++-- src/TolerantDefinitionResolver.php | 25 ------------ 6 files changed, 61 insertions(+), 58 deletions(-) create mode 100644 src/FqnUtilities.php diff --git a/src/CompletionProvider.php b/src/CompletionProvider.php index 93b09a4..5ce8bec 100644 --- a/src/CompletionProvider.php +++ b/src/CompletionProvider.php @@ -142,7 +142,7 @@ class CompletionProvider // If the name is an Error node, just filter by the class if ($node instanceof Node\Expr\MethodCall || $node instanceof Node\Expr\PropertyFetch) { // For instances, resolve the variable type - $prefixes = DefinitionResolver::getFqnsFromType( + $prefixes = FqnUtilities::getFqnsFromType( $this->definitionResolver->resolveExpressionNodeToType($node->var) ); } else { diff --git a/src/DefinitionResolver.php b/src/DefinitionResolver.php index 67399dd..1692c6e 100644 --- a/src/DefinitionResolver.php +++ b/src/DefinitionResolver.php @@ -170,31 +170,6 @@ class DefinitionResolver implements DefinitionResolverInterface return $this->index->getDefinition($fqn, $globalFallback); } - /** - * Returns all possible FQNs in a type - * - * @param Type $type - * @return string[] - */ - public static function getFqnsFromType(Type $type): array - { - $fqns = []; - if ($type instanceof Types\Object_) { - $fqsen = $type->getFqsen(); - if ($fqsen !== null) { - $fqns[] = substr((string)$fqsen, 1); - } - } - if ($type instanceof Types\Compound) { - for ($i = 0; $t = $type->get($i); $i++) { - foreach (self::getFqnsFromType($type) as $fqn) { - $fqns[] = $fqn; - } - } - } - return $fqns; - } - /** * Given any node, returns the FQN of the symbol that is referenced * Returns null if the FQN could not be resolved or the reference node references a variable @@ -366,7 +341,7 @@ class DefinitionResolver implements DefinitionResolverInterface * @param Node\Expr\Variable|Node\Expr\ClosureUse $var The variable access * @return Node\Expr\Assign|Node\Expr\AssignOp|Node\Param|Node\Expr\ClosureUse|null */ - public static function resolveVariableToNode(Node\Expr $var) + private static function resolveVariableToNode(Node\Expr $var) { $n = $var; // When a use is passed, start outside the closure to not return immediatly diff --git a/src/FqnUtilities.php b/src/FqnUtilities.php new file mode 100644 index 0000000..f4b5375 --- /dev/null +++ b/src/FqnUtilities.php @@ -0,0 +1,53 @@ +getFqsen(); + if ($fqsen !== null) { + $fqns[] = substr((string)$fqsen, 1); + } + } + if ($type instanceof Types\Compound) { + for ($i = 0; $t = $type->get($i); $i++) { + foreach (self::getFqnsFromType($type) as $fqn) { + $fqns[] = $fqn; + } + } + } + return $fqns; + } +} \ No newline at end of file diff --git a/src/NodeVisitor/DefinitionCollector.php b/src/NodeVisitor/DefinitionCollector.php index 57de95f..7579ce9 100644 --- a/src/NodeVisitor/DefinitionCollector.php +++ b/src/NodeVisitor/DefinitionCollector.php @@ -5,7 +5,7 @@ namespace LanguageServer\NodeVisitor; use PhpParser\{NodeVisitorAbstract, Node}; use LanguageServer\{ - Definition, DefinitionResolver, DefinitionResolverInterface + Definition, DefinitionResolver, DefinitionResolverInterface, FqnUtilities }; use LanguageServer\Protocol\SymbolInformation; @@ -38,7 +38,7 @@ class DefinitionCollector extends NodeVisitorAbstract public function enterNode(Node $node) { - $fqn = DefinitionResolver::getDefinedFqn($node); + $fqn = FqnUtilities::getDefinedFqn($node); // Only index definitions with an FQN (no variables) if ($fqn === null) { return; diff --git a/src/Server/TextDocument.php b/src/Server/TextDocument.php index 55341a3..1d4d0d5 100644 --- a/src/Server/TextDocument.php +++ b/src/Server/TextDocument.php @@ -5,7 +5,7 @@ namespace LanguageServer\Server; use PhpParser\{Node, NodeTraverser}; use LanguageServer\{ - DefinitionResolverInterface, LanguageClient, PhpDocumentLoader, PhpDocument, DefinitionResolver, CompletionProvider + DefinitionResolverInterface, FqnUtilities, LanguageClient, PhpDocumentLoader, PhpDocument, DefinitionResolver, CompletionProvider }; use LanguageServer\NodeVisitor\VariableReferencesCollector; use LanguageServer\Protocol\{ @@ -221,7 +221,7 @@ class TextDocument } } else { // Definition with a global FQN - $fqn = DefinitionResolver::getDefinedFqn($node); + $fqn = FqnUtilities::getDefinedFqn($node); // Wait until indexing finished if (!$this->index->isComplete()) { yield waitForEvent($this->index, 'complete'); @@ -266,7 +266,7 @@ class TextDocument return []; } // Handle definition nodes - $fqn = DefinitionResolver::getDefinedFqn($node); + $fqn = FqnUtilities::getDefinedFqn($node); while (true) { if ($fqn) { $def = $this->index->getDefinition($fqn); @@ -307,7 +307,7 @@ class TextDocument if ($node === null) { return new Hover([]); } - $definedFqn = DefinitionResolver::getDefinedFqn($node); + $definedFqn = FqnUtilities::getDefinedFqn($node); while (true) { if ($definedFqn) { // Support hover for definitions diff --git a/src/TolerantDefinitionResolver.php b/src/TolerantDefinitionResolver.php index ebd8e65..23fd7ec 100644 --- a/src/TolerantDefinitionResolver.php +++ b/src/TolerantDefinitionResolver.php @@ -170,31 +170,6 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface return $this->index->getDefinition($fqn, $globalFallback); } - /** - * Returns all possible FQNs in a type - * - * @param Type $type - * @return string[] - */ - public static function getFqnsFromType(Type $type): array - { - $fqns = []; - if ($type instanceof Types\Object_) { - $fqsen = $type->getFqsen(); - if ($fqsen !== null) { - $fqns[] = substr((string)$fqsen, 1); - } - } - if ($type instanceof Types\Compound) { - for ($i = 0; $t = $type->get($i); $i++) { - foreach (self::getFqnsFromType($type) as $fqn) { - $fqns[] = $fqn; - } - } - } - return $fqns; - } - /** * Given any node, returns the FQN of the symbol that is referenced * Returns null if the FQN could not be resolved or the reference node references a variable