pub struct FileIndex { /* private fields */ }Expand description
Index of all known repo-relative file paths for O(1) existence checks.
Wraps a HashSet<String> with helper methods that language resolvers
commonly need. Linear-scan helpers (files_with_prefix, files_with_stem)
are acceptable at Layer 0 scale — optimize if benchmarks show a hot spot.
Implementations§
Source§impl FileIndex
impl FileIndex
Sourcepub fn new(paths: impl IntoIterator<Item = String>) -> Self
pub fn new(paths: impl IntoIterator<Item = String>) -> Self
Create a new FileIndex from an iterator of repo-relative paths.
Sourcepub fn new_with_root(
root: PathBuf,
paths: impl IntoIterator<Item = String>,
) -> Self
pub fn new_with_root( root: PathBuf, paths: impl IntoIterator<Item = String>, ) -> Self
Create a FileIndex with a repo root for file content access.
Sourcepub fn set_crate_roots(&mut self, roots: Vec<String>)
pub fn set_crate_roots(&mut self, roots: Vec<String>)
Set Rust crate root prefixes for workspace resolution.
Roots are sorted longest-first so workspace member paths take
precedence over the repo-root src/.
Sourcepub fn crate_root_for(&self, file_path: &str) -> Option<&str>
pub fn crate_root_for(&self, file_path: &str) -> Option<&str>
Returns the crate root prefix for the given file, if any.
For single-crate projects: Some("src/").
For workspace files at crates/foo/src/bar.rs: Some("crates/foo/src/").
Sourcepub fn set_workspace_members(&mut self, members: HashMap<String, String>)
pub fn set_workspace_members(&mut self, members: HashMap<String, String>)
Set workspace member mapping (snake_case crate name → crate root path).
Sourcepub fn workspace_member_root(&self, crate_name: &str) -> Option<&str>
pub fn workspace_member_root(&self, crate_name: &str) -> Option<&str>
Returns the crate root path for a workspace member crate name.
The first segment of an import path (e.g. "grep_regex" in
"grep_regex::matcher::Foo") is the name to look up.
Sourcepub fn has_workspace_members(&self) -> bool
pub fn has_workspace_members(&self) -> bool
True if workspace member mappings are configured.
Sourcepub fn set_scala_source_roots(&mut self, roots: Vec<String>)
pub fn set_scala_source_roots(&mut self, roots: Vec<String>)
Set Scala source root prefixes for multi-project sbt resolution.
Sourcepub fn scala_source_roots(&self) -> &[String]
pub fn scala_source_roots(&self) -> &[String]
Returns the discovered Scala source root prefixes.
Sourcepub fn set_ruby_autoload_roots(&mut self, roots: Vec<String>)
pub fn set_ruby_autoload_roots(&mut self, roots: Vec<String>)
Set Ruby/Rails Zeitwerk autoload root directories.
Sourcepub fn ruby_autoload_roots(&self) -> &[String]
pub fn ruby_autoload_roots(&self) -> &[String]
Returns the discovered Ruby autoload root directories.
Sourcepub fn set_ruby_lib_roots(&mut self, roots: Vec<String>)
pub fn set_ruby_lib_roots(&mut self, roots: Vec<String>)
Set Ruby lib/ root directories for monorepo require resolution.
Sourcepub fn ruby_lib_roots(&self) -> &[String]
pub fn ruby_lib_roots(&self) -> &[String]
Returns the discovered Ruby lib/ root directories.
Sourcepub fn read_file(&self, rel_path: &str) -> Option<String>
pub fn read_file(&self, rel_path: &str) -> Option<String>
Read a file relative to the index root. Returns None if no root is configured or the file can’t be read. Resolvers that need content access (like Go for go.mod) must tolerate None gracefully.
Sourcepub fn files_with_prefix(&self, prefix: &str) -> Vec<&String>
pub fn files_with_prefix(&self, prefix: &str) -> Vec<&String>
Find all files whose path starts with the given prefix. Returns references to avoid allocation when only checking existence.
Sourcepub fn files_with_stem(&self, stem: &str) -> Vec<&String>
pub fn files_with_stem(&self, stem: &str) -> Vec<&String>
Find all files whose stem (filename without extension) matches.
Useful for Go package resolution where foo.go matches package foo.
Auto Trait Implementations§
impl Freeze for FileIndex
impl RefUnwindSafe for FileIndex
impl Send for FileIndex
impl Sync for FileIndex
impl Unpin for FileIndex
impl UnsafeUnpin for FileIndex
impl UnwindSafe for FileIndex
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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> Fruit for T
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