pub struct AnalysisSession { /* private fields */ }Expand description
Long-lived analysis context. Owns the salsa database and tracks which stubs have been loaded.
Cheap to clone the inner db for parallel reads; writes funnel through
Self::ingest_file, Self::invalidate_file, and the crate-internal
[Self::with_db_mut].
Implementations§
Source§impl AnalysisSession
impl AnalysisSession
Sourcepub fn new(php_version: PhpVersion) -> Self
pub fn new(php_version: PhpVersion) -> Self
Create a session targeting the given PHP language version.
pub fn with_cache(self, cache: Arc<AnalysisCache>) -> Self
pub fn with_psr4(self, map: Arc<Psr4Map>) -> Self
pub fn with_user_stubs(self, files: Vec<PathBuf>, dirs: Vec<PathBuf>) -> Self
pub fn php_version(&self) -> PhpVersion
pub fn cache(&self) -> Option<&AnalysisCache>
pub fn psr4(&self) -> Option<&Psr4Map>
Sourcepub fn ensure_stubs_loaded(&self)
pub fn ensure_stubs_loaded(&self)
Load every PHP built-in stub plus any configured user stubs.
Idempotent. Equivalent to the legacy “load everything” behavior; use
Self::ensure_essential_stubs_loaded in incremental scenarios where
cold-start latency matters more than comprehensive stub coverage.
Sourcepub fn ensure_essential_stubs_loaded(&self)
pub fn ensure_essential_stubs_loaded(&self)
Load only the curated set of essential stubs (Core, standard, SPL, date) plus any configured user stubs. About 25 of 120 stub files; covers types and functions used by virtually all PHP code.
Other extension stubs (Reflection, gd, openssl, …) can be brought in
on demand via [Self::ensure_stubs_for_symbol] when user code
references them. Idempotent — already-loaded stubs are skipped.
Sourcepub fn ensure_all_stubs_loaded(&self)
pub fn ensure_all_stubs_loaded(&self)
Load every embedded PHP stub plus any configured user stubs. Use for batch tools (CLI, full project analysis) where comprehensive symbol coverage matters more than cold-start latency.
Sourcepub fn ensure_stub_for_function(&self, name: &str) -> bool
pub fn ensure_stub_for_function(&self, name: &str) -> bool
Ensure the embedded stub that defines name (a function) is ingested.
Returns true when a matching stub exists (whether or not it was
already loaded), false when name isn’t a known PHP built-in.
Sourcepub fn ensure_stub_for_class(&self, fqcn: &str) -> bool
pub fn ensure_stub_for_class(&self, fqcn: &str) -> bool
Ensure the embedded stub that defines fqcn (a class / interface /
trait / enum) is ingested. Case-insensitive lookup with optional
leading backslash.
Sourcepub fn ensure_stub_for_constant(&self, name: &str) -> bool
pub fn ensure_stub_for_constant(&self, name: &str) -> bool
Ensure the embedded stub that defines name (a constant) is ingested.
Sourcepub fn loaded_stub_count(&self) -> usize
pub fn loaded_stub_count(&self) -> usize
Number of distinct embedded stubs currently ingested into the session. Useful for diagnostics and bench reporting.
Sourcepub fn ensure_stubs_for_source(&self, source: &str)
pub fn ensure_stubs_for_source(&self, source: &str)
Auto-discover and ingest the embedded stubs needed to cover every
built-in PHP function / class / constant referenced by source.
Used by crate::FileAnalyzer::analyze to keep essentials-only mode
correct without forcing callers to enumerate which stubs they need.
Idempotent — already-loaded stubs are skipped via Self::loaded_stubs.
The discovery scan is a coarse identifier sweep (see
[crate::stubs::collect_referenced_builtin_paths]) — it may pull in
a slightly larger set than the file strictly needs, but never misses
a referenced built-in. Cost is sub-millisecond per file.
Fast path: if every embedded stub is already loaded (e.g. after a
batch tool called Self::ensure_all_stubs_loaded), the source scan
is skipped entirely.
Sourcepub fn snapshot_db(&self) -> MirDb
pub fn snapshot_db(&self) -> MirDb
Cheap clone of the salsa db for a read-only query. The lock is held only for the duration of the clone, so concurrent readers never serialize on each other or on writes for longer than the clone itself.
Sourcepub fn read<R>(&self, f: impl FnOnce(&dyn MirDatabase) -> R) -> R
pub fn read<R>(&self, f: impl FnOnce(&dyn MirDatabase) -> R) -> R
Run a closure with read access to a database snapshot. The snapshot is taken under a brief lock, then the closure runs without holding it.
Sourcepub fn ingest_file(&self, file: Arc<str>, source: Arc<str>) -> FileDefinitions
pub fn ingest_file(&self, file: Arc<str>, source: Arc<str>) -> FileDefinitions
Pass 1 ingestion. Updates the file’s source text in the salsa db,
runs definition collection, and ingests the resulting stub slice.
Triggers stub loading on first call. Also updates the cache’s reverse-
dependency graph for file so cross-file invalidation stays correct
across incremental edits — without rebuilding the graph from scratch.
If file was previously ingested, its old definitions and reference
locations are removed first so renames / deletions don’t leave stale
state in the codebase. (Without this, long-running sessions would
accumulate dead reference-location entries indefinitely.)
Sourcepub fn invalidate_file(&self, file: &str)
pub fn invalidate_file(&self, file: &str)
Drop a file’s contribution to the session: codebase definitions, reference locations, salsa input handle, cache entry, and outgoing reverse-dependency edges. Cache entries of dependent files are also evicted (cross-file invalidation).
Use this when a file is closed by the consumer, or before a re-ingest
of substantially changed content. (Plain re-ingest via
Self::ingest_file also drops old definitions, but does not
remove the salsa input handle — call this for full cleanup.)
Sourcepub fn tracked_file_count(&self) -> usize
pub fn tracked_file_count(&self) -> usize
Number of files currently tracked in this session’s salsa input set. Stable across reads; useful for diagnostics and memory bounds checks.
Sourcepub fn definition_of(&self, symbol: &str) -> Option<Location>
pub fn definition_of(&self, symbol: &str) -> Option<Location>
Resolve symbol (a class FQCN or function FQN) to its declaration
location. Powers go-to-definition for top-level symbols. Returns
None if the symbol isn’t known to the codebase or has no recorded
source span (e.g. some stub-only declarations).
Sourcepub fn member_definition(
&self,
fqcn: &str,
member_name: &str,
) -> Option<Location>
pub fn member_definition( &self, fqcn: &str, member_name: &str, ) -> Option<Location>
Resolve a class member (method / property / class constant / enum case) to its declaration location, walking the inheritance chain.
Sourcepub fn references_to(&self, symbol: &str) -> Vec<(Arc<str>, u32, u16, u16)>
pub fn references_to(&self, symbol: &str) -> Vec<(Arc<str>, u32, u16, u16)>
Every recorded reference to symbol (as (file, line, col_start, col_end)). Use crate::symbol::ResolvedSymbol::codebase_key to
build the lookup key from a ResolvedSymbol returned by
crate::FileAnalysis::symbol_at.
Sourcepub fn document_symbols(&self, file: &str) -> Vec<DocumentSymbol>
pub fn document_symbols(&self, file: &str) -> Vec<DocumentSymbol>
All declarations defined in file (classes, interfaces, traits, enums,
functions, constants). Powers outline / document-symbols views and any
other consumer that needs the file’s top-level symbol set. Returns an
empty Vec if file hasn’t been ingested.
Sourcepub fn run_inference_sweep(&self, files: &[(Arc<str>, Arc<str>)])
pub fn run_inference_sweep(&self, files: &[(Arc<str>, Arc<str>)])
Cross-file inference sweep. For each (file, source) pair, runs the
Pass 2 inference-only mode on a cloned db (parallel via rayon), then
commits the collected inferred return types to the canonical db.
Call this on idle / save / explicit user request, not on every
keystroke — crate::FileAnalyzer::analyze deliberately skips
inference sweep on the hot path. Files whose source contains parse
errors are silently skipped.
Auto Trait Implementations§
impl !Freeze for AnalysisSession
impl RefUnwindSafe for AnalysisSession
impl Send for AnalysisSession
impl Sync for AnalysisSession
impl Unpin for AnalysisSession
impl UnsafeUnpin for AnalysisSession
impl UnwindSafe for AnalysisSession
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 moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more