pub struct WorkspaceIndexData {
pub files: Vec<(Uri, Arc<FileIndex>)>,
pub classes_by_name: HashMap<String, Vec<ClassRef>>,
pub subtypes_of: HashMap<Arc<str>, Vec<ClassRef>>,
pub decls_by_name: HashMap<String, Vec<DeclRef>>,
pub classes_by_lowercase_name: Vec<(Box<str>, ClassRef)>,
/* private fields */
}Expand description
Aggregated workspace-level index. Constructed once per salsa revision by
workspace_index and held behind an Arc for cheap cross-request sharing.
Fields§
§files: Vec<(Uri, Arc<FileIndex>)>§classes_by_name: HashMap<String, Vec<ClassRef>>§subtypes_of: HashMap<Arc<str>, Vec<ClassRef>>parent_or_interface_or_trait_name → [subtype ClassRef].
A class that extends X AND implements Y contributes separate entries
under both keys. Keyed by Arc<str> so insertions from ClassDef’s
already-interned fields are pointer copies rather than heap allocations.
decls_by_name: HashMap<String, Vec<DeclRef>>declared_name → [DeclRef] over every function, class, method,
property (stored without $), class constant, and enum case in the
workspace; enables O(1) go-to-definition lookups.
classes_by_lowercase_name: Vec<(Box<str>, ClassRef)>One (lowercase_short_name, ClassRef) pair per distinct class name,
sorted by the lowercase key. Built once per revision so completion’s
prefix search can binary-search a range instead of scanning every
class name (and re-lowercasing it) on every keystroke.
Implementations§
Source§impl WorkspaceIndexData
impl WorkspaceIndexData
Sourcepub fn at(&self, r: ClassRef) -> Option<(&Uri, &ClassDef)>
pub fn at(&self, r: ClassRef) -> Option<(&Uri, &ClassDef)>
Resolve a ClassRef back to its (uri, class_def) pair.
Sourcepub fn resolve_class_ref(&self, name: &str) -> Option<ClassRef>
pub fn resolve_class_ref(&self, name: &str) -> Option<ClassRef>
Resolve name to a single ClassRef, disambiguating same-named
classes in different namespaces. classes_by_name is keyed by short
name only, so two unrelated classes sharing a name (e.g. Laravel’s
Illuminate\Support\Facades\Auth vs Illuminate\Container\Attributes\ Auth) collide in one bucket; picking .first() unconditionally
silently returns whichever happens to be indexed first.
name may be a bare short name (kept for compatibility — resolves to
the first match, as before) or a fully-qualified name (Foo\Bar\Baz,
optionally leading with \), in which case the candidate whose own
FQN matches (case-insensitively, PHP class names are
case-insensitive) is preferred over an arbitrary first match.
Sourcepub fn find_declaration(
&self,
name: &str,
exclude: Option<&Uri>,
) -> Option<Location>
pub fn find_declaration( &self, name: &str, exclude: Option<&Uri>, ) -> Option<Location>
O(1) replacement for the old linear per-file scan (since removed):
find a declaration by name, optionally excluding one file (the current
document, which the caller has already searched with accurate AST
ranges). Matching rules mirror the old scan: a sigil query ($foo)
matches functions, classes, and properties named foo; a bare query
matches every declaration kind. Returns a zero-width line Location.
Sourcepub fn from_files(files: Vec<(Uri, Arc<FileIndex>)>) -> Self
pub fn from_files(files: Vec<(Uri, Arc<FileIndex>)>) -> Self
Constructor that builds the reverse maps from an already-materialised
(Uri, Arc<FileIndex>) slice. Exposed so callers that don’t want to
spin up a full AnalysisHost (unit tests of
find_implementations_from_workspace, benchmark crates) can exercise
the aggregate-shaped helpers directly. Production code goes through
the workspace_index salsa query instead.
Sourcepub fn func_signatures(&self) -> Arc<HashMap<String, FuncSignature>>
pub fn func_signatures(&self) -> Arc<HashMap<String, FuncSignature>>
The workspace-wide function/method signature map, built on first use
per revision and shared (via Arc clone) by every later inlay_hint
request against this same WorkspaceIndexData.
Auto Trait Implementations§
impl !Freeze for WorkspaceIndexData
impl RefUnwindSafe for WorkspaceIndexData
impl Send for WorkspaceIndexData
impl Sync for WorkspaceIndexData
impl Unpin for WorkspaceIndexData
impl UnsafeUnpin for WorkspaceIndexData
impl UnwindSafe for WorkspaceIndexData
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more