diff --git a/src/DefinitionResolver.php b/src/DefinitionResolver.php index 1692c6e..426b552 100644 --- a/src/DefinitionResolver.php +++ b/src/DefinitionResolver.php @@ -42,7 +42,7 @@ class DefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return string */ - public function getDeclarationLineFromNode(Node $node): string + public function getDeclarationLineFromNode($node): string { if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) { // Properties and constants can have multiple declarations @@ -70,7 +70,7 @@ class DefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return string|null */ - public function getDocumentationFromNode(Node $node) + public function getDocumentationFromNode($node) { if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) { $node = $node->getAttribute('parentNode'); @@ -101,7 +101,7 @@ class DefinitionResolver implements DefinitionResolverInterface * @param string $fqn * @return Definition */ - public function createDefinitionFromNode(Node $node, string $fqn = null): Definition + public function createDefinitionFromNode($node, string $fqn = null): Definition { $parent = $node->getAttribute('parentNode'); $def = new Definition; @@ -141,7 +141,7 @@ class DefinitionResolver implements DefinitionResolverInterface * @param Node $node Any reference node * @return Definition|null */ - public function resolveReferenceNodeToDefinition(Node $node) + public function resolveReferenceNodeToDefinition($node) { // Variables are not indexed globally, as they stay in the file scope anyway if ($node instanceof Node\Expr\Variable) { @@ -177,7 +177,7 @@ class DefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return string|null */ - public function resolveReferenceNodeToFqn(Node $node) + public function resolveReferenceNodeToFqn($node) { $parent = $node->getAttribute('parentNode'); @@ -393,7 +393,7 @@ class DefinitionResolver implements DefinitionResolverInterface * @param \PhpParser\Node\Expr $expr * @return \phpDocumentor\Reflection\Type */ - public function resolveExpressionNodeToType(Node\Expr $expr): Type + public function resolveExpressionNodeToType($expr): Type { if ($expr instanceof Node\Expr\Variable || $expr instanceof Node\Expr\ClosureUse) { if ($expr instanceof Node\Expr\Variable && $expr->name === 'this') { @@ -691,7 +691,7 @@ class DefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return \phpDocumentor\Reflection\Type|null */ - public function getTypeFromNode(Node $node) + public function getTypeFromNode($node) { if ($node instanceof Node\Param) { // Parameters @@ -798,7 +798,7 @@ class DefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return string|null */ - public static function getDefinedFqn(Node $node) + public static function getDefinedFqn($node) { $parent = $node->getAttribute('parentNode'); // Anonymous classes don't count as a definition diff --git a/src/DefinitionResolverInterface.php b/src/DefinitionResolverInterface.php index dba4935..767f4e0 100644 --- a/src/DefinitionResolverInterface.php +++ b/src/DefinitionResolverInterface.php @@ -4,59 +4,60 @@ namespace LanguageServer; use phpDocumentor\Reflection\Type; use PhpParser\Node; +use Microsoft\PhpParser as Tolerant; interface DefinitionResolverInterface { /** * Builds the declaration line for a given node * - * @param Node $node + * @param Node | Tolerant\Node $node * @return string */ - public function getDeclarationLineFromNode(Node $node) : string; + public function getDeclarationLineFromNode($node) : string; /** * Gets the documentation string for a node, if it has one * - * @param Node $node + * @param Node | Tolerant\Node $node * @return string|null */ - public function getDocumentationFromNode(Node $node); + public function getDocumentationFromNode($node); /** * Create a Definition for a definition node * - * @param Node $node + * @param Node | Tolerant\Node $node * @param string $fqn * @return Definition */ - public function createDefinitionFromNode(Node $node, string $fqn = null) : Definition; + public function createDefinitionFromNode($node, string $fqn = null) : Definition; /** * Given any node, returns the Definition object of the symbol that is referenced * - * @param Node $node Any reference node + * @param Node | Tolerant\Node $node Any reference node * @return Definition|null */ - public function resolveReferenceNodeToDefinition(Node $node); + public function resolveReferenceNodeToDefinition($node); /** * 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 * - * @param Node $node + * @param Node | Tolerant\Node $node * @return string|null */ - public function resolveReferenceNodeToFqn(Node $node); + public function resolveReferenceNodeToFqn($node); /** * Given an expression node, resolves that expression recursively to a type. * If the type could not be resolved, returns Types\Mixed. * - * @param \PhpParser\Node\Expr $expr + * @param \PhpParser\Node\Expr | Tolerant\Node $expr * @return \phpDocumentor\Reflection\Type */ - public function resolveExpressionNodeToType(Node\Expr $expr) : Type; + public function resolveExpressionNodeToType($expr) : Type; /** * Returns the type a reference to this symbol will resolve to. @@ -69,8 +70,17 @@ interface DefinitionResolverInterface * If it is unknown, will be Types\Mixed. * Returns null if the node does not have a type. * - * @param Node $node + * @param Node | Tolerant\Node $node * @return \phpDocumentor\Reflection\Type|null */ - public function getTypeFromNode(Node $node); + public function getTypeFromNode($node); + + /** + * Returns the fully qualified name (FQN) that is defined by a node + * Returns null if the node does not declare any symbol that can be referenced by an FQN + * + * @param Node | Tolerant\Node $node + * @return string|null + */ + public static function getDefinedFqn($node); } \ No newline at end of file diff --git a/src/TolerantDefinitionResolver.php b/src/TolerantDefinitionResolver.php index 23fd7ec..e09a6ca 100644 --- a/src/TolerantDefinitionResolver.php +++ b/src/TolerantDefinitionResolver.php @@ -42,7 +42,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return string */ - public function getDeclarationLineFromNode(Node $node): string + public function getDeclarationLineFromNode($node): string { if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) { // Properties and constants can have multiple declarations @@ -70,7 +70,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return string|null */ - public function getDocumentationFromNode(Node $node) + public function getDocumentationFromNode($node) { if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) { $node = $node->getAttribute('parentNode'); @@ -101,7 +101,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface * @param string $fqn * @return Definition */ - public function createDefinitionFromNode(Node $node, string $fqn = null): Definition + public function createDefinitionFromNode($node, string $fqn = null): Definition { $parent = $node->getAttribute('parentNode'); $def = new Definition; @@ -141,7 +141,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface * @param Node $node Any reference node * @return Definition|null */ - public function resolveReferenceNodeToDefinition(Node $node) + public function resolveReferenceNodeToDefinition($node) { // Variables are not indexed globally, as they stay in the file scope anyway if ($node instanceof Node\Expr\Variable) { @@ -177,7 +177,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return string|null */ - public function resolveReferenceNodeToFqn(Node $node) + public function resolveReferenceNodeToFqn($node) { $parent = $node->getAttribute('parentNode'); @@ -393,7 +393,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface * @param \PhpParser\Node\Expr $expr * @return \phpDocumentor\Reflection\Type */ - public function resolveExpressionNodeToType(Node\Expr $expr): Type + public function resolveExpressionNodeToType($expr): Type { if ($expr instanceof Node\Expr\Variable || $expr instanceof Node\Expr\ClosureUse) { if ($expr instanceof Node\Expr\Variable && $expr->name === 'this') { @@ -691,7 +691,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return \phpDocumentor\Reflection\Type|null */ - public function getTypeFromNode(Node $node) + public function getTypeFromNode($node) { if ($node instanceof Node\Param) { // Parameters @@ -798,7 +798,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface * @param Node $node * @return string|null */ - public static function getDefinedFqn(Node $node) + public static function getDefinedFqn($node) { $parent = $node->getAttribute('parentNode'); // Anonymous classes don't count as a definition