kind = $kind; $this->catalogMethod = \Closure::fromCallable($catalogMethod); $this->catalog = $catalog ?? new SymbolCatalog(); } /** * {@inheritdoc} */ public function appliesToKind(int $kinds): bool { return ($kinds & $this->kind) !== 0; } /** * {@inheritdoc} */ public function getCompletions(AnalysisResult $analysis): array { $prefix = $analysis->prefix; $all = ($this->catalogMethod)($this->catalog); // If we have a prefix, try prefix matching first if ($prefix !== '') { $lowerPrefix = \strtolower($prefix); $matches = []; foreach ($all as $name) { if (\strpos(\strtolower($name), $lowerPrefix) === 0) { $matches[] = $name; } } // If we found enough prefix matches, return those (sorted) if (\count($matches) >= 10) { \sort($matches); return $matches; } } return $all; } }