1
0
Fork 0
php-language-server/src/NodeVisitor/DefinitionCollector.php

55 lines
1.5 KiB
PHP
Raw Normal View History

2016-10-08 12:59:08 +00:00
<?php
declare(strict_types = 1);
2016-10-09 14:03:56 +00:00
namespace LanguageServer\NodeVisitor;
2016-10-08 12:59:08 +00:00
use PhpParser\{NodeVisitorAbstract, Node};
use LanguageServer\{Definition, DefinitionResolver};
use LanguageServer\Protocol\SymbolInformation;
2016-10-08 12:59:08 +00:00
/**
* Collects definitions of classes, interfaces, traits, methods, properties and constants
* Depends on ReferencesAdder and NameResolver
*/
class DefinitionCollector extends NodeVisitorAbstract
{
/**
* Map from fully qualified name (FQN) to Definition
2016-10-08 12:59:08 +00:00
*
* @var Definition[]
2016-10-08 12:59:08 +00:00
*/
public $definitions = [];
/**
* Map from fully qualified name (FQN) to Node
*
* @var Node[]
*/
public $nodes = [];
private $definitionResolver;
public function __construct(DefinitionResolver $definitionResolver)
{
$this->definitionResolver = $definitionResolver;
}
2016-10-08 12:59:08 +00:00
public function enterNode(Node $node)
{
$fqn = DefinitionResolver::getDefinedFqn($node);
// Only index definitions with an FQN (no variables)
if ($fqn === null) {
return;
2016-10-08 12:59:08 +00:00
}
$this->nodes[$fqn] = $node;
$def = new Definition;
$def->fqn = $fqn;
$def->symbolInformation = SymbolInformation::fromNode($node, $fqn);
$def->type = $this->definitionResolver->getTypeFromNode($node);
$def->declarationLine = $this->definitionResolver->getDeclarationLineFromNode($node);
$def->documentation = $this->definitionResolver->getDocumentationFromNode($node);
$this->definitions[$fqn] = $def;
2016-10-08 12:59:08 +00:00
}
}