pub struct FixtureDatabase {Show 13 fields
pub definitions: Arc<DashMap<String, Vec<FixtureDefinition>>>,
pub file_definitions: Arc<DashMap<PathBuf, HashSet<String>>>,
pub usages: Arc<DashMap<PathBuf, Vec<FixtureUsage>>>,
pub usage_by_fixture: Arc<DashMap<String, Vec<(PathBuf, FixtureUsage)>>>,
pub file_cache: Arc<DashMap<PathBuf, Arc<String>>>,
pub undeclared_fixtures: Arc<DashMap<PathBuf, Vec<UndeclaredFixture>>>,
pub imports: Arc<DashMap<PathBuf, HashSet<String>>>,
pub canonical_path_cache: Arc<DashMap<PathBuf, PathBuf>>,
pub line_index_cache: Arc<DashMap<PathBuf, (u64, Arc<Vec<usize>>)>>,
pub ast_cache: Arc<DashMap<PathBuf, (u64, Arc<Mod>)>>,
pub definitions_version: Arc<AtomicU64>,
pub cycle_cache: Arc<DashMap<(), (u64, Arc<Vec<FixtureCycle>>)>>,
pub available_fixtures_cache: Arc<DashMap<PathBuf, (u64, Arc<Vec<FixtureDefinition>>)>>,
}Expand description
The central database for fixture definitions and usages.
Uses DashMap for lock-free concurrent access during workspace scanning.
Fields§
§definitions: Arc<DashMap<String, Vec<FixtureDefinition>>>Map from fixture name to all its definitions (can be in multiple conftest.py files).
file_definitions: Arc<DashMap<PathBuf, HashSet<String>>>Reverse index: file path -> fixture names defined in that file. Used for efficient cleanup when a file is re-analyzed.
usages: Arc<DashMap<PathBuf, Vec<FixtureUsage>>>Map from file path to fixtures used in that file.
usage_by_fixture: Arc<DashMap<String, Vec<(PathBuf, FixtureUsage)>>>Reverse index: fixture name -> (file_path, usage) pairs. Used for efficient O(1) lookup in find_references_for_definition.
file_cache: Arc<DashMap<PathBuf, Arc<String>>>Cache of file contents for analyzed files (uses Arc for efficient sharing).
undeclared_fixtures: Arc<DashMap<PathBuf, Vec<UndeclaredFixture>>>Map from file path to undeclared fixtures used in function bodies.
imports: Arc<DashMap<PathBuf, HashSet<String>>>Map from file path to imported names in that file.
canonical_path_cache: Arc<DashMap<PathBuf, PathBuf>>Cache of canonical paths to avoid repeated filesystem calls.
line_index_cache: Arc<DashMap<PathBuf, (u64, Arc<Vec<usize>>)>>Cache of line indices (byte offsets) for files to avoid recomputation. Stores (content_hash, line_index) to invalidate when content changes.
ast_cache: Arc<DashMap<PathBuf, (u64, Arc<Mod>)>>Cache of parsed AST for files to avoid re-parsing. Stores (content_hash, ast) to invalidate when content changes.
definitions_version: Arc<AtomicU64>Version counter for definitions, incremented on each change. Used to invalidate cycle detection cache and available fixtures cache.
cycle_cache: Arc<DashMap<(), (u64, Arc<Vec<FixtureCycle>>)>>Cache of detected fixture cycles. Stores (definitions_version, cycles) to invalidate when definitions change.
available_fixtures_cache: Arc<DashMap<PathBuf, (u64, Arc<Vec<FixtureDefinition>>)>>Cache of available fixtures per file. Stores (definitions_version, fixtures) to invalidate when definitions change.
Implementations§
Source§impl FixtureDatabase
impl FixtureDatabase
Sourcepub fn analyze_file(&self, file_path: PathBuf, content: &str)
pub fn analyze_file(&self, file_path: PathBuf, content: &str)
Analyze a Python file for fixtures and usages. This is the public API - it cleans up previous definitions before analyzing.
Source§impl FixtureDatabase
impl FixtureDatabase
Sourcepub fn print_fixtures_tree(
&self,
root_path: &Path,
skip_unused: bool,
only_unused: bool,
)
pub fn print_fixtures_tree( &self, root_path: &Path, skip_unused: bool, only_unused: bool, )
Print fixtures as a tree structure
Sourcepub fn get_unused_fixtures(&self) -> Vec<(PathBuf, String)>
pub fn get_unused_fixtures(&self) -> Vec<(PathBuf, String)>
Get all unused fixtures (fixtures with zero usages). Returns a vector of (file_path, fixture_name) tuples sorted by path then name. Excludes third-party fixtures from site-packages.
Source§impl FixtureDatabase
impl FixtureDatabase
Sourcepub fn find_fixture_definition(
&self,
file_path: &Path,
line: u32,
character: u32,
) -> Option<FixtureDefinition>
pub fn find_fixture_definition( &self, file_path: &Path, line: u32, character: u32, ) -> Option<FixtureDefinition>
Find fixture definition for a given position in a file
Sourcepub fn find_fixture_or_definition_at_position(
&self,
file_path: &Path,
line: u32,
character: u32,
) -> Option<FixtureDefinition>
pub fn find_fixture_or_definition_at_position( &self, file_path: &Path, line: u32, character: u32, ) -> Option<FixtureDefinition>
Find fixture definition at a given position, checking both usages and definitions.
This is useful for Call Hierarchy where we want to work on both fixture definition lines and fixture usage sites.
Sourcepub fn get_definition_at_line(
&self,
file_path: &Path,
line: usize,
fixture_name: &str,
) -> Option<FixtureDefinition>
pub fn get_definition_at_line( &self, file_path: &Path, line: usize, fixture_name: &str, ) -> Option<FixtureDefinition>
Public method to get the fixture definition at a specific line and name
Sourcepub fn find_fixture_at_position(
&self,
file_path: &Path,
line: u32,
character: u32,
) -> Option<String>
pub fn find_fixture_at_position( &self, file_path: &Path, line: u32, character: u32, ) -> Option<String>
Find the fixture name at a given position (either definition or usage)
Sourcepub fn extract_word_at_position(
&self,
line: &str,
character: usize,
) -> Option<String>
pub fn extract_word_at_position( &self, line: &str, character: usize, ) -> Option<String>
Extract the word at a given character position in a line
Sourcepub fn find_fixture_references(&self, fixture_name: &str) -> Vec<FixtureUsage>
pub fn find_fixture_references(&self, fixture_name: &str) -> Vec<FixtureUsage>
Find all references (usages) of a fixture by name
Sourcepub fn find_references_for_definition(
&self,
definition: &FixtureDefinition,
) -> Vec<FixtureUsage>
pub fn find_references_for_definition( &self, definition: &FixtureDefinition, ) -> Vec<FixtureUsage>
Find all references that resolve to a specific fixture definition. Uses the usage_by_fixture reverse index for O(m) lookup where m = usages of this fixture, instead of O(n) iteration over all usages.
Sourcepub fn get_undeclared_fixtures(
&self,
file_path: &Path,
) -> Vec<UndeclaredFixture>
pub fn get_undeclared_fixtures( &self, file_path: &Path, ) -> Vec<UndeclaredFixture>
Get all undeclared fixture usages for a file
Sourcepub fn get_available_fixtures(&self, file_path: &Path) -> Vec<FixtureDefinition>
pub fn get_available_fixtures(&self, file_path: &Path) -> Vec<FixtureDefinition>
Get all available fixtures for a given file. Results are cached with version-based invalidation for performance. Returns Arc to avoid cloning the potentially large Vec on cache hits.
Sourcepub fn get_completion_context(
&self,
file_path: &Path,
line: u32,
character: u32,
) -> Option<CompletionContext>
pub fn get_completion_context( &self, file_path: &Path, line: u32, character: u32, ) -> Option<CompletionContext>
Get the completion context for a given position
Sourcepub fn get_function_param_insertion_info(
&self,
file_path: &Path,
function_line: usize,
) -> Option<ParamInsertionInfo>
pub fn get_function_param_insertion_info( &self, file_path: &Path, function_line: usize, ) -> Option<ParamInsertionInfo>
Get information about where to insert a new parameter in a function signature
Sourcepub fn is_inside_function(
&self,
file_path: &Path,
line: u32,
character: u32,
) -> Option<(String, bool, Vec<String>)>
pub fn is_inside_function( &self, file_path: &Path, line: u32, character: u32, ) -> Option<(String, bool, Vec<String>)>
Check if a position is inside a test or fixture function (parameter or body) Returns Some((function_name, is_fixture, declared_params)) if inside a function
Sourcepub fn detect_fixture_cycles(&self) -> Arc<Vec<FixtureCycle>>
pub fn detect_fixture_cycles(&self) -> Arc<Vec<FixtureCycle>>
Detect circular dependencies in fixtures with caching. Results are cached and only recomputed when definitions change. Returns Arc to avoid cloning the potentially large Vec.
Sourcepub fn detect_fixture_cycles_in_file(
&self,
file_path: &Path,
) -> Vec<FixtureCycle>
pub fn detect_fixture_cycles_in_file( &self, file_path: &Path, ) -> Vec<FixtureCycle>
Detect cycles for fixtures in a specific file. Returns cycles where the first fixture in the cycle is defined in the given file. Uses cached cycle detection results for efficiency.
Sourcepub fn detect_scope_mismatches_in_file(
&self,
file_path: &Path,
) -> Vec<ScopeMismatch>
pub fn detect_scope_mismatches_in_file( &self, file_path: &Path, ) -> Vec<ScopeMismatch>
Detect scope mismatches where a broader-scoped fixture depends on a narrower-scoped fixture. For example, a session-scoped fixture depending on a function-scoped fixture. Returns mismatches for fixtures defined in the given file.
Sourcepub fn resolve_fixture_for_file(
&self,
file_path: &Path,
fixture_name: &str,
) -> Option<FixtureDefinition>
pub fn resolve_fixture_for_file( &self, file_path: &Path, fixture_name: &str, ) -> Option<FixtureDefinition>
Resolve a fixture by name for a given file using priority rules.
Returns the best matching FixtureDefinition based on pytest’s fixture shadowing rules: same file > conftest hierarchy > third-party.
Source§impl FixtureDatabase
impl FixtureDatabase
Sourcepub fn scan_workspace(&self, root_path: &Path)
pub fn scan_workspace(&self, root_path: &Path)
Scan a workspace directory for test files and conftest.py files. Optionally accepts exclude patterns from configuration.
Sourcepub fn scan_workspace_with_excludes(
&self,
root_path: &Path,
exclude_patterns: &[Pattern],
)
pub fn scan_workspace_with_excludes( &self, root_path: &Path, exclude_patterns: &[Pattern], )
Scan a workspace directory with custom exclude patterns.
Source§impl FixtureDatabase
impl FixtureDatabase
Sourcepub fn cleanup_file_cache(&self, file_path: &Path)
pub fn cleanup_file_cache(&self, file_path: &Path)
Remove all cached data for a file. Called when a file is closed or deleted to prevent unbounded memory growth.
Trait Implementations§
Source§impl Debug for FixtureDatabase
impl Debug for FixtureDatabase
Auto Trait Implementations§
impl Freeze for FixtureDatabase
impl !RefUnwindSafe for FixtureDatabase
impl Send for FixtureDatabase
impl Sync for FixtureDatabase
impl Unpin for FixtureDatabase
impl !UnwindSafe for FixtureDatabase
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§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