FixtureDatabase

Struct FixtureDatabase 

Source
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

Source

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

Source

pub fn print_fixtures_tree( &self, root_path: &Path, skip_unused: bool, only_unused: bool, )

Print fixtures as a tree structure

Source

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

Source

pub fn get_imported_fixtures( &self, file_path: &Path, visited: &mut HashSet<PathBuf>, ) -> HashSet<String>

Get fixtures that are re-exported from a file via imports. This handles from .module import * patterns that bring fixtures into scope.

Returns fixture names that are available in file_path via imports.

Source

pub fn is_fixture_imported_in_file( &self, fixture_name: &str, file_path: &Path, ) -> bool

Check if a fixture is available in a file via imports. This is used in resolution to check conftest.py files that import fixtures.

Source§

impl FixtureDatabase

Source

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

Source

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.

Source

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

Source

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)

Source

pub fn extract_word_at_position( &self, line: &str, character: usize, ) -> Option<String>

Extract the word at a given character position in a line

Source

pub fn find_fixture_references(&self, fixture_name: &str) -> Vec<FixtureUsage>

Find all references (usages) of a fixture by name

Source

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.

Source

pub fn get_undeclared_fixtures( &self, file_path: &Path, ) -> Vec<UndeclaredFixture>

Get all undeclared fixture usages for a file

Source

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.

Source

pub fn get_completion_context( &self, file_path: &Path, line: u32, character: u32, ) -> Option<CompletionContext>

Get the completion context for a given position

Source

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

Source

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

Source

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.

Source

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.

Source

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.

Source

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

pub fn find_containing_function( &self, file_path: &Path, line: usize, ) -> Option<String>

Find the name of the function/fixture containing a given line.

Used for call hierarchy to identify callers.

Source§

impl FixtureDatabase

Source

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.

Source

pub fn scan_workspace_with_excludes( &self, root_path: &Path, exclude_patterns: &[Pattern], )

Scan a workspace directory with custom exclude patterns.

Source§

impl FixtureDatabase

Source

pub fn new() -> Self

Create a new empty fixture database.

Source

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

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for FixtureDatabase

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, U> ExactFrom<T> for U
where U: TryFrom<T>,

Source§

fn exact_from(value: T) -> U

Source§

impl<T, U> ExactInto<U> for T
where U: ExactFrom<T>,

Source§

fn exact_into(self) -> U

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T, U> OverflowingInto<U> for T
where U: OverflowingFrom<T>,

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> RoundingInto<U> for T
where U: RoundingFrom<T>,

Source§

impl<T, U> SaturatingInto<U> for T
where U: SaturatingFrom<T>,

Source§

impl<T> ToDebugString for T
where T: Debug,

Source§

fn to_debug_string(&self) -> String

Returns the String produced by Ts Debug implementation.

§Examples
use malachite_base::strings::ToDebugString;

assert_eq!([1, 2, 3].to_debug_string(), "[1, 2, 3]");
assert_eq!(
    [vec![2, 3], vec![], vec![4]].to_debug_string(),
    "[[2, 3], [], [4]]"
);
assert_eq!(Some(5).to_debug_string(), "Some(5)");
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T, U> WrappingInto<U> for T
where U: WrappingFrom<T>,

Source§

fn wrapping_into(self) -> U