SymbolKind::CLASS_, Node\Stmt\Trait_::class => SymbolKind::CLASS_, Node\Stmt\Interface_::class => SymbolKind::INTERFACE, Node\Stmt\Namespace_::class => SymbolKind::NAMESPACE, Node\Stmt\Function_::class => SymbolKind::FUNCTION, Node\Stmt\ClassMethod::class => SymbolKind::METHOD, Node\Stmt\PropertyProperty::class => SymbolKind::PROPERTY, Node\Const_::class => SymbolKind::CONSTANT ]; $class = get_class($node); if (!isset($nodeSymbolKindMap[$class])) { throw new Exception("Not a declaration node: $class"); } $symbol = new self; $symbol->kind = $nodeSymbolKindMap[$class]; $symbol->name = (string)$node->name; $symbol->location = Location::fromNode($node); if ($fqn !== null) { $parts = preg_split('/(::|\\\\)/', $fqn); array_pop($parts); $symbol->containerName = implode('\\', $parts); } return $symbol; } /** * @param string $name * @param int $kind * @param Location $location * @param string $containerName */ public function __construct($name = null, $kind = null, $location = null, $containerName = null) { $this->name = $name; $this->kind = $kind; $this->location = $location; $this->containerName = $containerName; } }