pub struct ProjectAnalyzer {
pub on_file_done: Option<Arc<dyn Fn() + Send + Sync>>,
pub psr4: Option<Arc<Psr4Map>>,
pub find_dead_code: bool,
pub php_version: Option<PhpVersion>,
pub stub_files: Vec<PathBuf>,
pub stub_dirs: Vec<PathBuf>,
/* private fields */
}Expand description
Batch-oriented analyzer: file discovery, parsing, and analysis.
ProjectAnalyzer is the primary entry point for analyzing a project as a whole.
It orchestrates parallel file discovery and parsing, using the same core
analysis engine as AnalysisSession (salsa database and Pass 2 driver).
Unified Design: ProjectAnalyzer and AnalysisSession now share the same
database management via [SharedDb]. ProjectAnalyzer is the batch API
(all files at once), while AnalysisSession is the incremental API (file-by-file).
Both use Pass2Driver, the same definition collection logic, and identical
database operations, eliminating code duplication.
Fields§
§on_file_done: Option<Arc<dyn Fn() + Send + Sync>>Called once after each file completes Pass 2 (used for progress reporting).
psr4: Option<Arc<Psr4Map>>PSR-4 autoloader mapping from composer.json, if available.
find_dead_code: boolWhen true, run dead code detection at the end of analysis.
php_version: Option<PhpVersion>Target PHP language version. None means “not configured”; resolved to
PhpVersion::LATEST when passed down to StatementsAnalyzer.
stub_files: Vec<PathBuf>Additional stub files to parse before analysis (absolute paths).
stub_dirs: Vec<PathBuf>Additional stub directories to walk and parse before analysis (absolute paths).
Implementations§
Source§impl ProjectAnalyzer
impl ProjectAnalyzer
pub fn new() -> Self
Sourcepub fn with_cache(cache_dir: &Path) -> Self
pub fn with_cache(cache_dir: &Path) -> Self
Create a ProjectAnalyzer with a disk-backed cache stored under cache_dir.
Sourcepub fn set_cache_dir(&mut self, cache_dir: &Path)
pub fn set_cache_dir(&mut self, cache_dir: &Path)
Enable the disk-backed cache for an already-constructed analyzer.
Sourcepub fn from_composer(root: &Path) -> Result<(Self, Psr4Map), ComposerError>
pub fn from_composer(root: &Path) -> Result<(Self, Psr4Map), ComposerError>
Create a ProjectAnalyzer from a project root containing composer.json.
Returns the analyzer (with psr4 set) and the Psr4Map so callers can
call map.project_files() / map.vendor_files().
Sourcepub fn with_php_version(self, version: PhpVersion) -> Self
pub fn with_php_version(self, version: PhpVersion) -> Self
Builder method: set the target PHP version.
Sourcepub fn with_dead_code(self, enabled: bool) -> Self
pub fn with_dead_code(self, enabled: bool) -> Self
Builder method: enable dead-code detection at the end of analysis.
Sourcepub fn with_progress_callback(
self,
callback: Arc<dyn Fn() + Send + Sync>,
) -> Self
pub fn with_progress_callback( self, callback: Arc<dyn Fn() + Send + Sync>, ) -> Self
Builder method: set a progress callback invoked once per analyzed file.
Sourcepub fn with_stub_files(self, files: Vec<PathBuf>) -> Self
pub fn with_stub_files(self, files: Vec<PathBuf>) -> Self
Builder method: add user stub files.
Sourcepub fn with_stub_dirs(self, dirs: Vec<PathBuf>) -> Self
pub fn with_stub_dirs(self, dirs: Vec<PathBuf>) -> Self
Builder method: add user stub directories.
Sourcepub fn with_cache_dir(self, cache_dir: &Path) -> Self
pub fn with_cache_dir(self, cache_dir: &Path) -> Self
Builder method: configure a disk-backed cache at the given directory.
Sourcepub fn with_psr4(self, map: Arc<Psr4Map>) -> Self
pub fn with_psr4(self, map: Arc<Psr4Map>) -> Self
Builder method: attach a PSR-4 autoloader map.
Sourcepub fn contains_function(&self, fqn: &str) -> bool
pub fn contains_function(&self, fqn: &str) -> bool
Returns true if a function with fqn is registered and active.
Sourcepub fn contains_class(&self, fqcn: &str) -> bool
pub fn contains_class(&self, fqcn: &str) -> bool
Returns true if a class / interface / trait / enum is registered.
Sourcepub fn contains_method(&self, class: &str, name: &str) -> bool
pub fn contains_method(&self, class: &str, name: &str) -> bool
Returns true if class has a method named name (case-insensitive).
Sourcepub fn definition_of(
&self,
symbol: &Symbol,
) -> Result<Location, SymbolLookupError>
pub fn definition_of( &self, symbol: &Symbol, ) -> Result<Location, SymbolLookupError>
Resolve a symbol to its declaration location.
Sourcepub fn references_to(&self, symbol: &Symbol) -> Vec<(Arc<str>, Range)>
pub fn references_to(&self, symbol: &Symbol) -> Vec<(Arc<str>, Range)>
All recorded references to a symbol, as (file, range) pairs.
Sourcepub fn load_stubs(&self)
pub fn load_stubs(&self)
Load PHP built-in stubs. Called automatically by analyze if not done yet.
Stubs are filtered against the configured target PHP version (or
PhpVersion::LATEST if none was set).
Sourcepub fn analyze(&self, paths: &[PathBuf]) -> AnalysisResult
pub fn analyze(&self, paths: &[PathBuf]) -> AnalysisResult
Run the full analysis pipeline on a set of file paths.
Sourcepub fn re_analyze_file(
&self,
file_path: &str,
new_content: &str,
) -> AnalysisResult
pub fn re_analyze_file( &self, file_path: &str, new_content: &str, ) -> AnalysisResult
Re-analyze a single file within the existing codebase.
This is the incremental analysis API for LSP:
- Removes old definitions from this file
- Re-runs Pass 1 (definition collection) on the new content
- Resolves any newly-collected
@psalm-import-typedeclarations - Re-runs Pass 2 (body analysis) on this file
- Returns the analysis result for this file only
Sourcepub fn analyze_source(source: &str) -> AnalysisResult
pub fn analyze_source(source: &str) -> AnalysisResult
Analyze a PHP source string without a real file path. Useful for tests and LSP single-file mode.
Sourcepub fn discover_files(root: &Path) -> Vec<PathBuf>
pub fn discover_files(root: &Path) -> Vec<PathBuf>
Discover all .php files under a directory, recursively.
Sourcepub fn collect_types_only(&self, paths: &[PathBuf])
pub fn collect_types_only(&self, paths: &[PathBuf])
Pass 1 only: collect type definitions from paths into the codebase without
analyzing method bodies or emitting issues. Used to load vendor types.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for ProjectAnalyzer
impl !RefUnwindSafe for ProjectAnalyzer
impl Send for ProjectAnalyzer
impl Sync for ProjectAnalyzer
impl Unpin for ProjectAnalyzer
impl UnsafeUnpin for ProjectAnalyzer
impl !UnwindSafe for ProjectAnalyzer
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