pub struct EntityGraph {
pub entities: HashMap<String, EntityInfo>,
pub edges: Vec<EntityRef>,
pub dependents: HashMap<String, Vec<String>>,
pub dependencies: HashMap<String, Vec<String>>,
}Expand description
A complete entity dependency graph for a set of files.
Fields§
§entities: HashMap<String, EntityInfo>All entities indexed by ID
edges: Vec<EntityRef>Edges: from_entity → [(to_entity, ref_type)]
dependents: HashMap<String, Vec<String>>Reverse index: entity_id → entities that reference it
dependencies: HashMap<String, Vec<String>>Forward index: entity_id → entities it references
Implementations§
Source§impl EntityGraph
impl EntityGraph
Sourcepub fn build(
root: &Path,
file_paths: &[String],
registry: &ParserRegistry,
) -> Self
pub fn build( root: &Path, file_paths: &[String], registry: &ParserRegistry, ) -> Self
Build an entity graph from a set of files.
Pass 1: Extract all entities from all files using the parser registry. Pass 2: For each entity, find identifier tokens and resolve them against the symbol table to create reference edges.
Sourcepub fn get_dependents(&self, entity_id: &str) -> Vec<&EntityInfo>
pub fn get_dependents(&self, entity_id: &str) -> Vec<&EntityInfo>
Get entities that depend on the given entity (reverse deps).
Sourcepub fn get_dependencies(&self, entity_id: &str) -> Vec<&EntityInfo>
pub fn get_dependencies(&self, entity_id: &str) -> Vec<&EntityInfo>
Get entities that the given entity depends on (forward deps).
Sourcepub fn impact_analysis(&self, entity_id: &str) -> Vec<&EntityInfo>
pub fn impact_analysis(&self, entity_id: &str) -> Vec<&EntityInfo>
Impact analysis: if the given entity changes, what else might be affected? Returns all transitive dependents (breadth-first), capped at 10k.
Sourcepub fn impact_analysis_capped(
&self,
entity_id: &str,
max_visited: usize,
) -> Vec<&EntityInfo>
pub fn impact_analysis_capped( &self, entity_id: &str, max_visited: usize, ) -> Vec<&EntityInfo>
Impact analysis with a cap on maximum nodes visited. Returns transitive dependents up to the cap. Uses borrowed strings.
Sourcepub fn impact_count(&self, entity_id: &str, max_count: usize) -> usize
pub fn impact_count(&self, entity_id: &str, max_count: usize) -> usize
Count transitive dependents without collecting them (faster for large graphs). Uses borrowed strings to avoid allocation overhead.
Sourcepub fn update_from_changes(
&mut self,
changed_files: &[FileChange],
root: &Path,
registry: &ParserRegistry,
)
pub fn update_from_changes( &mut self, changed_files: &[FileChange], root: &Path, registry: &ParserRegistry, )
Incrementally update the graph from a set of changed files.
Instead of rebuilding the entire graph, this only re-extracts entities from changed files and re-resolves their references. This is faster than a full rebuild when only a few files changed.
For each changed file:
- Deleted: remove all entities from that file, prune edges
- Added/Modified: remove old entities, extract new ones, rebuild references
- Renamed: update file paths in entity info
Trait Implementations§
Auto Trait Implementations§
impl Freeze for EntityGraph
impl RefUnwindSafe for EntityGraph
impl Send for EntityGraph
impl Sync for EntityGraph
impl Unpin for EntityGraph
impl UnsafeUnpin for EntityGraph
impl UnwindSafe for EntityGraph
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> 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