pub struct FileIndex {
pub entries: Vec<FileEntry>,
/* private fields */
}Expand description
The indexed result of one filesystem walk. All rules share this index —
the walk happens once per alint check invocation.
path_set is a lazy HashSet<Arc<Path>> over file entries.
Built once on first call to FileIndex::contains_file /
FileIndex::file_path_set and re-used across all subsequent
lookups. Cross-file rules that ask “does this exact path
exist?” (most importantly file_exists instantiated by
for_each_dir) hit the set instead of doing an O(N) linear
scan over every entry. At 1M files in a 5,000-package
monorepo, this turns the fan-out shape from O(D × N) =
5 × 10⁹ ops to O(D) = 5,000 lookups.
Fields§
§entries: Vec<FileEntry>Implementations§
Source§impl FileIndex
impl FileIndex
Sourcepub fn from_entries(entries: Vec<FileEntry>) -> Self
pub fn from_entries(entries: Vec<FileEntry>) -> Self
Construct a FileIndex from raw entries. Equivalent to
FileIndex { entries, ..Default::default() } but spelled
out so test/bench fixtures don’t have to know about the
internal lazy path_set field.
pub fn files(&self) -> impl Iterator<Item = &FileEntry>
pub fn dirs(&self) -> impl Iterator<Item = &FileEntry>
pub fn total_size(&self) -> u64
Sourcepub fn file_path_set(&self) -> &HashSet<Arc<Path>>
pub fn file_path_set(&self) -> &HashSet<Arc<Path>>
Get (lazily building on first call) the hash-indexed set
of all file (non-dir) paths in this index. Subsequent
calls return the cached set. Concurrent first calls are
safe (OnceLock ensures a single initialiser wins).
Sourcepub fn contains_file(&self, rel: &Path) -> bool
pub fn contains_file(&self, rel: &Path) -> bool
O(1) “does this exact relative path exist as a file?”
query. Triggers the lazy build of the path set on first
call. Use this instead of iterating files() whenever a
rule needs to check a fully-qualified path — at scale,
the hash lookup is several orders of magnitude faster.
Sourcepub fn find_file(&self, rel: &Path) -> Option<&FileEntry>
pub fn find_file(&self, rel: &Path) -> Option<&FileEntry>
Find a file entry by its exact relative path. Uses the
lazy path set for the existence check, then re-scans
entries linearly to return the matching &FileEntry
(entries are pinned, but the set stores Arc<Path> keys
not direct entry references). Most callers want the
boolean answer — prefer FileIndex::contains_file.
Trait Implementations§
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> 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