O(1) variant of class_hover_from_index: resolves word/fqn via
WorkspaceIndexData::resolve_class_ref first, falling back to the full
linear scan only when the index doesn’t resolve the class — preserves
every edge case the scan covers (e.g. names the aggregate’s short-name
map doesn’t disambiguate the same way), just skips the common-case cost.
Like docs_for_symbol_from_index, but scoped to a class hint — see
signature_for_symbol_from_index_scoped. Also skips the PHP-builtin
fallback when a class hint is given, since a hint means the symbol is
known to be a user-defined method, not a global builtin function.
Extract the receiver variable from immediately before ->word or ?->word
at the cursor’s exact column position. Uses the column rather than
str::find() so multiple method calls on the same line are handled
correctly.
Indexed variant: uses pre-computed SymbolMaps for the cross-file
declaration lookup (path 4/5), eliminating repeated AST walks on stable
files. find_class_doc gives mir-member hover and static-prop hover (path
2/3) the same O(1) workspace-index fast path, falling back to a linear
other_docs scan only when it misses (index not ready, unsaved file, …).
Named-arg hover still walks other_docs directly — it has no single
resolved class to key a fast lookup on.
Build a hover for a static method call found by class short name + method name
in the workspace index. Used when the primary mir path cannot resolve a cross-file
static call (e.g. Str::camel(…) where Str is only known through a use-import).
Like resolve_use_alias, but also returns the full FQN the alias
resolves to, so callers can disambiguate between same-named classes in
different namespaces (e.g. many vendored Factory classes all locally
aliased to FactoryContract) instead of matching on the short name alone.
Like signature_for_symbol_from_index, but when class_hint is given,
only a method whose owning class matches it is considered — disambiguates
same-named methods on unrelated classes (e.g. two classes both declaring
save()) instead of returning whichever one is indexed first. A hint
also skips the free-function search entirely, since a hint means the
symbol is known to be a method.