use correct terminology
parent
e34d8e15dd
commit
14f840bd2f
|
@ -201,12 +201,12 @@ class CompletionProvider
|
|||
$this->definitionResolver->resolveExpressionNodeToType($node->dereferencableExpression)
|
||||
);
|
||||
|
||||
// The namespaces of the symbol and its parents (eg the implemented interfaces)
|
||||
foreach ($this->expandParentFqns($fqns) as $namespace) {
|
||||
// Collect namespaces definitions
|
||||
foreach ($this->index->getDefinitionsForNamespace($namespace) as $fqn => $def) {
|
||||
// The FQNs of the symbol and its parents (eg the implemented interfaces)
|
||||
foreach ($this->expandParentFqns($fqns) as $parentFqn) {
|
||||
// Collect fqn definitions
|
||||
foreach ($this->index->getDefinitionsForFqn($parentFqn) as $fqn => $def) {
|
||||
// Add the object access operator to only get members of all parents
|
||||
$prefix = $namespace . '->';
|
||||
$prefix = $parentFqn . '->';
|
||||
if (substr($fqn, 0, strlen($prefix)) === $prefix && !$def->isMember) {
|
||||
$list->items[] = CompletionItem::fromDefinition($def);
|
||||
}
|
||||
|
@ -231,12 +231,12 @@ class CompletionProvider
|
|||
$classType = $this->definitionResolver->resolveExpressionNodeToType($scoped->scopeResolutionQualifier)
|
||||
);
|
||||
|
||||
// The namespaces of the symbol and its parents (eg the implemented interfaces)
|
||||
foreach ($this->expandParentFqns($fqns) as $namespace) {
|
||||
// Collect namespaces definitions
|
||||
foreach ($this->index->getDefinitionsForNamespace($namespace) as $fqn => $def) {
|
||||
// The FQNs of the symbol and its parents (eg the implemented interfaces)
|
||||
foreach ($this->expandParentFqns($fqns) as $parentFqn) {
|
||||
// Collect fqn definitions
|
||||
foreach ($this->index->getDefinitionsForFqn($parentFqn) as $fqn => $def) {
|
||||
// Append :: operator to only get static members of all parents
|
||||
$prefix = strtolower($namespace . '::');
|
||||
$prefix = strtolower($parentFqn . '::');
|
||||
if (substr(strtolower($fqn), 0, strlen($prefix)) === $prefix && !$def->isMember) {
|
||||
$list->items[] = CompletionItem::fromDefinition($def);
|
||||
}
|
||||
|
|
|
@ -129,16 +129,16 @@ abstract class AbstractAggregateIndex implements ReadableIndex
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a Generator providing the Definitions that are in the given namespace
|
||||
* Returns a Generator providing the Definitions that are in the given FQN
|
||||
*
|
||||
* @param string $namespace
|
||||
* @param string $fqn
|
||||
* @return \Generator providing Definitions[]
|
||||
*/
|
||||
public function getDefinitionsForNamespace(string $namespace): \Generator
|
||||
public function getDefinitionsForFqn(string $fqn): \Generator
|
||||
{
|
||||
foreach ($this->getIndexes() as $index) {
|
||||
foreach ($index->getDefinitionsForNamespace($namespace) as $fqn => $definition) {
|
||||
yield $fqn => $definition;
|
||||
foreach ($index->getDefinitionsForFqn($fqn) as $symbolFqn => $definition) {
|
||||
yield $symbolFqn => $definition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ class Index implements ReadableIndex, \Serializable
|
|||
use EmitterTrait;
|
||||
|
||||
/**
|
||||
* An associative array that maps namespaces to
|
||||
* An associative array that maps fully qualified names to
|
||||
* an associative array that maps fully qualified symbol names
|
||||
* to global Definitions, e.g. :
|
||||
* [
|
||||
|
@ -27,7 +27,7 @@ class Index implements ReadableIndex, \Serializable
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
private $namespaceDefinitions = [];
|
||||
private $fqnDefinitions = [];
|
||||
|
||||
/**
|
||||
* An associative array that maps fully qualified symbol names
|
||||
|
@ -108,8 +108,8 @@ class Index implements ReadableIndex, \Serializable
|
|||
*/
|
||||
public function getDefinitions(): \Generator
|
||||
{
|
||||
foreach ($this->namespaceDefinitions as $namespaceDefinition) {
|
||||
foreach ($namespaceDefinition as $fqn => $definition) {
|
||||
foreach ($this->fqnDefinitions as $fqnDefinition) {
|
||||
foreach ($fqnDefinition as $fqn => $definition) {
|
||||
yield $fqn => $definition;
|
||||
}
|
||||
}
|
||||
|
@ -129,15 +129,15 @@ class Index implements ReadableIndex, \Serializable
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a Generator providing the Definitions that are in the given namespace
|
||||
* Returns a Generator providing the Definitions that are in the given FQN
|
||||
*
|
||||
* @param string $namespace
|
||||
* @param string $fqn
|
||||
* @return \Generator providing Definitions[]
|
||||
*/
|
||||
public function getDefinitionsForNamespace(string $namespace): \Generator
|
||||
public function getDefinitionsForFqn(string $fqn): \Generator
|
||||
{
|
||||
foreach ($this->namespaceDefinitions[$namespace] ?? [] as $fqn => $definition) {
|
||||
yield $fqn => $definition;
|
||||
foreach ($this->fqnDefinitions[$fqn] ?? [] as $symbolFqn => $definition) {
|
||||
yield $symbolFqn => $definition;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -150,8 +150,8 @@ class Index implements ReadableIndex, \Serializable
|
|||
*/
|
||||
public function getDefinition(string $fqn, bool $globalFallback = false)
|
||||
{
|
||||
$namespace = $this->extractNamespace($fqn);
|
||||
$definitions = $this->namespaceDefinitions[$namespace] ?? [];
|
||||
$namespacedFqn = $this->extractNamespacedFqn($fqn);
|
||||
$definitions = $this->fqnDefinitions[$namespacedFqn] ?? [];
|
||||
|
||||
if (isset($definitions[$fqn])) {
|
||||
return $definitions[$fqn];
|
||||
|
@ -173,12 +173,12 @@ class Index implements ReadableIndex, \Serializable
|
|||
*/
|
||||
public function setDefinition(string $fqn, Definition $definition)
|
||||
{
|
||||
$namespace = $this->extractNamespace($fqn);
|
||||
if (!isset($this->namespaceDefinitions[$namespace])) {
|
||||
$this->namespaceDefinitions[$namespace] = [];
|
||||
$namespacedFqn = $this->extractNamespacedFqn($fqn);
|
||||
if (!isset($this->fqnDefinitions[$namespacedFqn])) {
|
||||
$this->fqnDefinitions[$namespacedFqn] = [];
|
||||
}
|
||||
|
||||
$this->namespaceDefinitions[$namespace][$fqn] = $definition;
|
||||
$this->fqnDefinitions[$namespacedFqn][$fqn] = $definition;
|
||||
$this->setGlobalDefinition($fqn, $definition);
|
||||
$this->emit('definition-added');
|
||||
}
|
||||
|
@ -192,12 +192,12 @@ class Index implements ReadableIndex, \Serializable
|
|||
*/
|
||||
public function removeDefinition(string $fqn)
|
||||
{
|
||||
$namespace = $this->extractNamespace($fqn);
|
||||
if (isset($this->namespaceDefinitions[$namespace])) {
|
||||
unset($this->namespaceDefinitions[$namespace][$fqn]);
|
||||
$namespacedFqn = $this->extractNamespacedFqn($fqn);
|
||||
if (isset($this->fqnDefinitions[$namespacedFqn])) {
|
||||
unset($this->fqnDefinitions[$namespacedFqn][$fqn]);
|
||||
|
||||
if (empty($this->namespaceDefinitions[$namespace])) {
|
||||
unset($this->namespaceDefinitions[$namespace]);
|
||||
if (empty($this->fqnDefinitions[$namespacedFqn])) {
|
||||
unset($this->fqnDefinitions[$namespacedFqn]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -277,8 +277,8 @@ class Index implements ReadableIndex, \Serializable
|
|||
$this->$prop = $val;
|
||||
}
|
||||
|
||||
foreach ($this->namespaceDefinitions as $namespaceDefinition) {
|
||||
foreach ($namespaceDefinition as $fqn => $definition) {
|
||||
foreach ($this->fqnDefinitions as $fqnDefinition) {
|
||||
foreach ($fqnDefinition as $fqn => $definition) {
|
||||
$this->setGlobalDefinition($fqn, $definition);
|
||||
}
|
||||
}
|
||||
|
@ -291,7 +291,7 @@ class Index implements ReadableIndex, \Serializable
|
|||
public function serialize()
|
||||
{
|
||||
return serialize([
|
||||
'namespaceDefinitions' => $this->namespaceDefinitions,
|
||||
'fqnDefinitions' => $this->fqnDefinitions,
|
||||
'references' => $this->references,
|
||||
'complete' => $this->complete,
|
||||
'staticComplete' => $this->staticComplete
|
||||
|
@ -313,10 +313,10 @@ class Index implements ReadableIndex, \Serializable
|
|||
}
|
||||
|
||||
/**
|
||||
* @param string $fqn
|
||||
* @return string The namespace extracted from the given FQN
|
||||
* @param string $fqn The symbol FQN
|
||||
* @return string The namespaced FQN extracted from the given symbol FQN
|
||||
*/
|
||||
private function extractNamespace(string $fqn): string
|
||||
private function extractNamespacedFqn(string $fqn): string
|
||||
{
|
||||
foreach (['::', '->'] as $operator) {
|
||||
if (false !== ($pos = strpos($fqn, $operator))) {
|
||||
|
|
|
@ -46,12 +46,12 @@ interface ReadableIndex extends EmitterInterface
|
|||
public function getGlobalDefinitions(): \Generator;
|
||||
|
||||
/**
|
||||
* Returns a Generator providing the Definitions that are in the given namespace
|
||||
* Returns a Generator providing the Definitions that are in the given FQN
|
||||
*
|
||||
* @param string $namespace
|
||||
* @param string $fqn
|
||||
* @return \Generator providing Definitions[]
|
||||
*/
|
||||
public function getDefinitionsForNamespace(string $namespace): \Generator;
|
||||
public function getDefinitionsForFqn(string $fqn): \Generator;
|
||||
|
||||
/**
|
||||
* Returns the Definition object by a specific FQN
|
||||
|
|
Loading…
Reference in New Issue