pub struct SymbolReferences { /* private fields */ }Expand description
Stores various maps tracking references between symbols (classes, functions, etc.) and class-like members (methods, properties, constants, etc.) within the codebase.
This is primarily used for dependency analysis, understanding code structure, and potentially for tasks like dead code detection or impact analysis.
Implementations§
Source§impl SymbolReferences
impl SymbolReferences
Sourcepub fn count_body_references(&self) -> usize
pub fn count_body_references(&self) -> usize
Counts the total number of body references from symbols and files.
Sourcepub fn count_signature_references(&self) -> usize
pub fn count_signature_references(&self) -> usize
Counts the total number of signature references from symbols and files.
Sourcepub fn total_map_entries(&self) -> usize
pub fn total_map_entries(&self) -> usize
Returns the total number of map entries (keys) across all reference maps. Useful for memory auditing — this count should remain stable across cycles in a long-running process.
Sourcepub fn count_referencing_symbols(
&self,
symbol: &SymbolIdentifier,
in_signature: bool,
) -> usize
pub fn count_referencing_symbols( &self, symbol: &SymbolIdentifier, in_signature: bool, ) -> usize
Sourcepub fn count_property_reads(&self, property: &SymbolIdentifier) -> usize
pub fn count_property_reads(&self, property: &SymbolIdentifier) -> usize
Sourcepub fn count_property_writes(&self, property: &SymbolIdentifier) -> usize
pub fn count_property_writes(&self, property: &SymbolIdentifier) -> usize
Sourcepub fn add_symbol_reference_to_class_member(
&mut self,
referencing_symbol: Word,
class_member: SymbolIdentifier,
in_signature: bool,
)
pub fn add_symbol_reference_to_class_member( &mut self, referencing_symbol: Word, class_member: SymbolIdentifier, in_signature: bool, )
Records that a top-level symbol (e.g., a function) references a class member.
Automatically adds a reference from the referencing symbol to the member’s class.
§Arguments
referencing_symbol: The FQN of the function or global const making the reference.class_member: A tuple(ClassName, MemberName)being referenced.in_signature:trueif the reference occurs in a signature context,falseif in the body.
Sourcepub fn add_symbol_reference_to_symbol(
&mut self,
referencing_symbol: Word,
symbol: Word,
in_signature: bool,
)
pub fn add_symbol_reference_to_symbol( &mut self, referencing_symbol: Word, symbol: Word, in_signature: bool, )
Records that a top-level symbol references another top-level symbol.
Skips self-references. Skips body references if already referenced in signature.
§Arguments
referencing_symbol: The FQN of the symbol making the reference.symbol: The FQN of the symbol being referenced.in_signature:trueif the reference occurs in a signature context,falseif in the body.
Sourcepub fn add_symbol_reference(
&mut self,
referencing: SymbolIdentifier,
referenced: SymbolIdentifier,
in_signature: bool,
)
pub fn add_symbol_reference( &mut self, referencing: SymbolIdentifier, referenced: SymbolIdentifier, in_signature: bool, )
Records a reference between arbitrary top-level symbols or class-like members.
Sourcepub fn add_reference(
&mut self,
referencing: ReferenceOrigin,
referenced: SymbolIdentifier,
in_signature: bool,
)
pub fn add_reference( &mut self, referencing: ReferenceOrigin, referenced: SymbolIdentifier, in_signature: bool, )
Records a body or signature reference from a symbol/member or file origin.
Sourcepub fn add_property_read_reference(
&mut self,
referencing: ReferenceOrigin,
property: SymbolIdentifier,
)
pub fn add_property_read_reference( &mut self, referencing: ReferenceOrigin, property: SymbolIdentifier, )
Records a property read from an explicit symbol, member, or file source.
Sourcepub fn add_property_write_reference(
&mut self,
referencing: ReferenceOrigin,
property: SymbolIdentifier,
)
pub fn add_property_write_reference( &mut self, referencing: ReferenceOrigin, property: SymbolIdentifier, )
Records a property write from an explicit symbol, member, or file source.
Sourcepub fn add_overridden_member_reference(
&mut self,
referencing: SymbolIdentifier,
overridden: SymbolIdentifier,
)
pub fn add_overridden_member_reference( &mut self, referencing: SymbolIdentifier, overridden: SymbolIdentifier, )
Records an explicit reference to an overridden class-like member.
Sourcepub fn add_functionlike_return_reference(
&mut self,
referencing: SymbolIdentifier,
referenced: SymbolIdentifier,
)
pub fn add_functionlike_return_reference( &mut self, referencing: SymbolIdentifier, referenced: SymbolIdentifier, )
Records an explicit use of another function-like’s return value.
Sourcepub fn add_class_member_reference_to_class_member(
&mut self,
referencing_class_member: SymbolIdentifier,
class_member: SymbolIdentifier,
in_signature: bool,
)
pub fn add_class_member_reference_to_class_member( &mut self, referencing_class_member: SymbolIdentifier, class_member: SymbolIdentifier, in_signature: bool, )
Records that a class member references another class member.
Automatically adds references from the referencing member’s class to the referenced member’s class, and from the referencing member to the referenced member’s class. Skips self-references.
§Arguments
referencing_class_member: Tuple(ClassName, MemberName)making the reference.class_member: Tuple(ClassName, MemberName)being referenced.in_signature:trueif the reference occurs in a signature context,falseif in the body.
Sourcepub fn add_class_member_reference_to_symbol(
&mut self,
referencing_class_member: SymbolIdentifier,
symbol: Word,
in_signature: bool,
)
pub fn add_class_member_reference_to_symbol( &mut self, referencing_class_member: SymbolIdentifier, symbol: Word, in_signature: bool, )
Records that a class member references a top-level symbol.
Automatically adds a reference from the referencing member’s class to the referenced symbol. Skips references to the member’s own class. Skips body references if already referenced in signature.
§Arguments
referencing_class_member: Tuple(ClassName, MemberName)making the reference.symbol: The FQN of the symbol being referenced.in_signature:trueif the reference occurs in a signature context,falseif in the body.
Sourcepub fn add_file_reference_to_class_member(
&mut self,
file_name: Word,
class_member: SymbolIdentifier,
in_signature: bool,
)
pub fn add_file_reference_to_class_member( &mut self, file_name: Word, class_member: SymbolIdentifier, in_signature: bool, )
Adds a file-level reference to a symbol or class-like member.
Member references also imply a reference to their containing class-like symbol.
Sourcepub fn add_reference_to_class_member(
&mut self,
scope: &ScopeContext<'_>,
class_member: SymbolIdentifier,
in_signature: bool,
)
pub fn add_reference_to_class_member( &mut self, scope: &ScopeContext<'_>, class_member: SymbolIdentifier, in_signature: bool, )
Convenience method to add a reference from the current function context to a class member.
Delegates to appropriate add_* methods based on the function context.
pub fn add_reference_for_method_call( &mut self, scope: &ScopeContext<'_>, method: &MethodIdentifier, )
Sourcepub fn add_reference_for_property_read(
&mut self,
scope: &ScopeContext<'_>,
class_name: Word,
property_name: Word,
)
pub fn add_reference_for_property_read( &mut self, scope: &ScopeContext<'_>, class_name: Word, property_name: Word, )
Records a read reference to a property (e.g., $this->prop used as a value).
Sourcepub fn add_reference_for_property_write(
&mut self,
scope: &ScopeContext<'_>,
class_name: Word,
property_name: Word,
)
pub fn add_reference_for_property_write( &mut self, scope: &ScopeContext<'_>, class_name: Word, property_name: Word, )
Records a write reference to a property (e.g., $this->prop = value).
This is tracked separately from read references to enable write-only property detection.
Sourcepub fn add_reference_to_overridden_class_member(
&mut self,
scope: &ScopeContext<'_>,
class_member: SymbolIdentifier,
)
pub fn add_reference_to_overridden_class_member( &mut self, scope: &ScopeContext<'_>, class_member: SymbolIdentifier, )
Convenience method to add a reference from the current function context to an overridden class member (e.g., parent::foo).
Delegates based on the function context.
Sourcepub fn add_reference_to_symbol(
&mut self,
scope: &ScopeContext<'_>,
symbol: Word,
in_signature: bool,
)
pub fn add_reference_to_symbol( &mut self, scope: &ScopeContext<'_>, symbol: Word, in_signature: bool, )
Convenience method to add a reference from the current function context to a top-level symbol.
Delegates to appropriate add_* methods based on the function context.
Sourcepub fn add_reference_to_functionlike_return(
&mut self,
referencing_functionlike: FunctionLikeIdentifier,
referenced_functionlike: FunctionLikeIdentifier,
)
pub fn add_reference_to_functionlike_return( &mut self, referencing_functionlike: FunctionLikeIdentifier, referenced_functionlike: FunctionLikeIdentifier, )
Records that one function/method references the return value of another. Used for dead code analysis.
Sourcepub fn extend(&mut self, other: Self)
pub fn extend(&mut self, other: Self)
Merges references from another SymbolReferences instance into this one.
Existing references are extended, not replaced.
Sourcepub fn for_each_reference(
&self,
visit: impl FnMut(ReferenceOrigin, SymbolIdentifier, SymbolReferenceKind),
)
pub fn for_each_reference( &self, visit: impl FnMut(ReferenceOrigin, SymbolIdentifier, SymbolReferenceKind), )
Visits every recorded reference without materializing a copy of the graph.
Sourcepub fn get_references_to_symbol(
&self,
target_symbol: SymbolIdentifier,
) -> HashSet<&SymbolIdentifier>
pub fn get_references_to_symbol( &self, target_symbol: SymbolIdentifier, ) -> HashSet<&SymbolIdentifier>
Sourcepub fn has_file_reference_to_symbol(
&self,
target_symbol: SymbolIdentifier,
) -> bool
pub fn has_file_reference_to_symbol( &self, target_symbol: SymbolIdentifier, ) -> bool
Returns whether a body or signature reference to a symbol originates from top-level file code.
Sourcepub fn get_invalid_symbols(
&self,
codebase_diff: &CodebaseDiff,
) -> Option<(HashSet<SymbolIdentifier>, WordSet, WordSet)>
pub fn get_invalid_symbols( &self, codebase_diff: &CodebaseDiff, ) -> Option<(HashSet<SymbolIdentifier>, WordSet, WordSet)>
Calculates sets of invalid symbols and members based on detected code changes (CodebaseDiff).
Propagates invalidation through the dependency graph stored in signature references.
Limits propagation expense to avoid excessive computation on large changes.
§Arguments
codebase_diff: Information about added, deleted, or modified symbols/signatures.
§Returns
Some((invalid_signatures, partially_invalid, invalid_files)) on success, where invalid_signatures contains
all symbol/member pairs whose signature is invalid (including propagated ones), and partially_invalid
contains symbols with at least one invalid member. invalid_files contains logical file names whose
top-level code references a symbol with an invalid signature.
Returns None if the propagation exceeds an expense limit (currently 5000 steps).
Sourcepub fn restore_references_for_safe_symbols(
&mut self,
previous: &SymbolReferences,
safe_symbols: &WordSet,
safe_symbol_members: &HashSet<SymbolIdentifier>,
)
pub fn restore_references_for_safe_symbols( &mut self, previous: &SymbolReferences, safe_symbols: &WordSet, safe_symbol_members: &HashSet<SymbolIdentifier>, )
Extracts references originating from safe (skipped) symbols and merges them into this instance.
When incremental analysis runs with diff = true, the analyzer skips safe symbols,
which means their body references are not collected. This method copies those missing
references from the previous run’s reference graph.
Only references from symbols that are in safe_symbols or safe_symbol_members
(and not already present in this instance) are copied.
§Arguments
previous- The previous run’s complete symbol referencessafe_symbols- Set of safe top-level symbol namessafe_symbol_members- Set of safe (symbol, member) pairs
Sourcepub fn remove_body_references_for_symbols(
&mut self,
symbols_and_members: &HashSet<SymbolIdentifier>,
file_names: &[Word],
)
pub fn remove_body_references_for_symbols( &mut self, symbols_and_members: &HashSet<SymbolIdentifier>, file_names: &[Word], )
Removes body references originating from the given symbols/members.
Used by the body-only fast path: when only function/method bodies changed (no signature changes), we remove old body references and let the analyzer rebuild them fresh. Signature references are kept because signatures didn’t change.
Also removes function-like return references and property read/write references from the given symbols, as those originate from body code.
File-level references keyed by the given file names are also removed.
Sourcepub fn remove_references_from_files(&mut self, file_names: &WordSet)
pub fn remove_references_from_files(&mut self, file_names: &WordSet)
Removes every reference originating from the given files.
Used when files are fully reanalyzed after a signature change. Both body and signature references must be rebuilt because either may have changed.
Sourcepub fn retain_references_from_files(&mut self, file_names: &WordSet)
pub fn retain_references_from_files(&mut self, file_names: &WordSet)
Removes references whose source files no longer exist in the current codebase.
Sourcepub fn remove_references_from_invalid_symbols(
&mut self,
invalid_symbols_and_members: &HashSet<SymbolIdentifier>,
)
pub fn remove_references_from_invalid_symbols( &mut self, invalid_symbols_and_members: &HashSet<SymbolIdentifier>, )
Removes all references originating from symbols/members that are marked as invalid.
§Arguments
invalid_symbols_and_members: A set containing(SymbolName, MemberName)tuples for invalid items.
Sourcepub fn retain_safe_symbol_references(
&mut self,
safe_symbols: &WordSet,
safe_symbol_members: &HashSet<SymbolIdentifier>,
)
pub fn retain_safe_symbol_references( &mut self, safe_symbols: &WordSet, safe_symbol_members: &HashSet<SymbolIdentifier>, )
Retains only references originating from safe (unchanged) symbols, removing all others.
This is the inverse of [remove_references_from_invalid_symbols]: instead of
specifying what to remove, you specify what to keep. References from non-safe symbols
will be rebuilt by populate_codebase and the analyzer.
This method also retains all builtin/prelude references (those where the key symbol is not user-defined, i.e., is in the base references).
Sourcepub fn remove_dirty_symbol_references(
&mut self,
dirty_symbols: &HashSet<SymbolIdentifier>,
)
pub fn remove_dirty_symbol_references( &mut self, dirty_symbols: &HashSet<SymbolIdentifier>, )
Removes references for dirty (non-safe) symbols — O(dirty) instead of O(all).
This is the inverse of [retain_safe_symbol_references]: instead of iterating all
entries and keeping safe ones, it directly removes entries for the given dirty set.
Much faster when the dirty set is small relative to the total number of references.
Trait Implementations§
Source§impl Clone for SymbolReferences
impl Clone for SymbolReferences
Source§fn clone(&self) -> SymbolReferences
fn clone(&self) -> SymbolReferences
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SymbolReferences
impl Debug for SymbolReferences
Source§impl Default for SymbolReferences
impl Default for SymbolReferences
Source§fn default() -> SymbolReferences
fn default() -> SymbolReferences
impl Eq for SymbolReferences
Source§impl PartialEq for SymbolReferences
impl PartialEq for SymbolReferences
impl StructuralPartialEq for SymbolReferences
Auto Trait Implementations§
impl Freeze for SymbolReferences
impl RefUnwindSafe for SymbolReferences
impl Send for SymbolReferences
impl Sync for SymbolReferences
impl Unpin for SymbolReferences
impl UnsafeUnpin for SymbolReferences
impl UnwindSafe for SymbolReferences
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);