1
0
Fork 0

update definition resolver interfaces

pull/357/head
Sara Itani 2017-03-01 16:01:06 -08:00
parent 591ecbd7d3
commit b1eb43516d
3 changed files with 40 additions and 30 deletions

View File

@ -42,7 +42,7 @@ class DefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return string * @return string
*/ */
public function getDeclarationLineFromNode(Node $node): string public function getDeclarationLineFromNode($node): string
{ {
if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) { if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) {
// Properties and constants can have multiple declarations // Properties and constants can have multiple declarations
@ -70,7 +70,7 @@ class DefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return string|null * @return string|null
*/ */
public function getDocumentationFromNode(Node $node) public function getDocumentationFromNode($node)
{ {
if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) { if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) {
$node = $node->getAttribute('parentNode'); $node = $node->getAttribute('parentNode');
@ -101,7 +101,7 @@ class DefinitionResolver implements DefinitionResolverInterface
* @param string $fqn * @param string $fqn
* @return Definition * @return Definition
*/ */
public function createDefinitionFromNode(Node $node, string $fqn = null): Definition public function createDefinitionFromNode($node, string $fqn = null): Definition
{ {
$parent = $node->getAttribute('parentNode'); $parent = $node->getAttribute('parentNode');
$def = new Definition; $def = new Definition;
@ -141,7 +141,7 @@ class DefinitionResolver implements DefinitionResolverInterface
* @param Node $node Any reference node * @param Node $node Any reference node
* @return Definition|null * @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 // Variables are not indexed globally, as they stay in the file scope anyway
if ($node instanceof Node\Expr\Variable) { if ($node instanceof Node\Expr\Variable) {
@ -177,7 +177,7 @@ class DefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return string|null * @return string|null
*/ */
public function resolveReferenceNodeToFqn(Node $node) public function resolveReferenceNodeToFqn($node)
{ {
$parent = $node->getAttribute('parentNode'); $parent = $node->getAttribute('parentNode');
@ -393,7 +393,7 @@ class DefinitionResolver implements DefinitionResolverInterface
* @param \PhpParser\Node\Expr $expr * @param \PhpParser\Node\Expr $expr
* @return \phpDocumentor\Reflection\Type * @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 instanceof Node\Expr\ClosureUse) {
if ($expr instanceof Node\Expr\Variable && $expr->name === 'this') { if ($expr instanceof Node\Expr\Variable && $expr->name === 'this') {
@ -691,7 +691,7 @@ class DefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return \phpDocumentor\Reflection\Type|null * @return \phpDocumentor\Reflection\Type|null
*/ */
public function getTypeFromNode(Node $node) public function getTypeFromNode($node)
{ {
if ($node instanceof Node\Param) { if ($node instanceof Node\Param) {
// Parameters // Parameters
@ -798,7 +798,7 @@ class DefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return string|null * @return string|null
*/ */
public static function getDefinedFqn(Node $node) public static function getDefinedFqn($node)
{ {
$parent = $node->getAttribute('parentNode'); $parent = $node->getAttribute('parentNode');
// Anonymous classes don't count as a definition // Anonymous classes don't count as a definition

View File

@ -4,59 +4,60 @@ namespace LanguageServer;
use phpDocumentor\Reflection\Type; use phpDocumentor\Reflection\Type;
use PhpParser\Node; use PhpParser\Node;
use Microsoft\PhpParser as Tolerant;
interface DefinitionResolverInterface interface DefinitionResolverInterface
{ {
/** /**
* Builds the declaration line for a given node * Builds the declaration line for a given node
* *
* @param Node $node * @param Node | Tolerant\Node $node
* @return string * @return string
*/ */
public function getDeclarationLineFromNode(Node $node) : string; public function getDeclarationLineFromNode($node) : string;
/** /**
* Gets the documentation string for a node, if it has one * Gets the documentation string for a node, if it has one
* *
* @param Node $node * @param Node | Tolerant\Node $node
* @return string|null * @return string|null
*/ */
public function getDocumentationFromNode(Node $node); public function getDocumentationFromNode($node);
/** /**
* Create a Definition for a definition node * Create a Definition for a definition node
* *
* @param Node $node * @param Node | Tolerant\Node $node
* @param string $fqn * @param string $fqn
* @return Definition * @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 * 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 * @return Definition|null
*/ */
public function resolveReferenceNodeToDefinition(Node $node); public function resolveReferenceNodeToDefinition($node);
/** /**
* Given any node, returns the FQN of the symbol that is referenced * 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 * 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 * @return string|null
*/ */
public function resolveReferenceNodeToFqn(Node $node); public function resolveReferenceNodeToFqn($node);
/** /**
* Given an expression node, resolves that expression recursively to a type. * Given an expression node, resolves that expression recursively to a type.
* If the type could not be resolved, returns Types\Mixed. * 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 * @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. * 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. * If it is unknown, will be Types\Mixed.
* Returns null if the node does not have a type. * Returns null if the node does not have a type.
* *
* @param Node $node * @param Node | Tolerant\Node $node
* @return \phpDocumentor\Reflection\Type|null * @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);
} }

View File

@ -42,7 +42,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return string * @return string
*/ */
public function getDeclarationLineFromNode(Node $node): string public function getDeclarationLineFromNode($node): string
{ {
if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) { if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) {
// Properties and constants can have multiple declarations // Properties and constants can have multiple declarations
@ -70,7 +70,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return string|null * @return string|null
*/ */
public function getDocumentationFromNode(Node $node) public function getDocumentationFromNode($node)
{ {
if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) { if ($node instanceof Node\Stmt\PropertyProperty || $node instanceof Node\Const_) {
$node = $node->getAttribute('parentNode'); $node = $node->getAttribute('parentNode');
@ -101,7 +101,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
* @param string $fqn * @param string $fqn
* @return Definition * @return Definition
*/ */
public function createDefinitionFromNode(Node $node, string $fqn = null): Definition public function createDefinitionFromNode($node, string $fqn = null): Definition
{ {
$parent = $node->getAttribute('parentNode'); $parent = $node->getAttribute('parentNode');
$def = new Definition; $def = new Definition;
@ -141,7 +141,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
* @param Node $node Any reference node * @param Node $node Any reference node
* @return Definition|null * @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 // Variables are not indexed globally, as they stay in the file scope anyway
if ($node instanceof Node\Expr\Variable) { if ($node instanceof Node\Expr\Variable) {
@ -177,7 +177,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return string|null * @return string|null
*/ */
public function resolveReferenceNodeToFqn(Node $node) public function resolveReferenceNodeToFqn($node)
{ {
$parent = $node->getAttribute('parentNode'); $parent = $node->getAttribute('parentNode');
@ -393,7 +393,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
* @param \PhpParser\Node\Expr $expr * @param \PhpParser\Node\Expr $expr
* @return \phpDocumentor\Reflection\Type * @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 instanceof Node\Expr\ClosureUse) {
if ($expr instanceof Node\Expr\Variable && $expr->name === 'this') { if ($expr instanceof Node\Expr\Variable && $expr->name === 'this') {
@ -691,7 +691,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return \phpDocumentor\Reflection\Type|null * @return \phpDocumentor\Reflection\Type|null
*/ */
public function getTypeFromNode(Node $node) public function getTypeFromNode($node)
{ {
if ($node instanceof Node\Param) { if ($node instanceof Node\Param) {
// Parameters // Parameters
@ -798,7 +798,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
* @param Node $node * @param Node $node
* @return string|null * @return string|null
*/ */
public static function getDefinedFqn(Node $node) public static function getDefinedFqn($node)
{ {
$parent = $node->getAttribute('parentNode'); $parent = $node->getAttribute('parentNode');
// Anonymous classes don't count as a definition // Anonymous classes don't count as a definition