use std::collections::HashMap;
use crate::confidence::ConfidenceMetadata;
use crate::graph::unified::bind::alias::AliasTable;
use crate::graph::unified::bind::scope::ScopeArena;
use crate::graph::unified::bind::scope::provenance::ScopeProvenanceStore;
use crate::graph::unified::bind::shadow::ShadowTable;
use crate::graph::unified::edge::bidirectional::BidirectionalEdgeStore;
use crate::graph::unified::storage::arena::NodeArena;
use crate::graph::unified::storage::edge_provenance::EdgeProvenanceStore;
use crate::graph::unified::storage::indices::AuxiliaryIndices;
use crate::graph::unified::storage::interner::StringInterner;
use crate::graph::unified::storage::metadata::NodeMetadataStore;
use crate::graph::unified::storage::node_provenance::NodeProvenanceStore;
use crate::graph::unified::storage::registry::FileRegistry;
use crate::graph::unified::storage::segment::FileSegmentTable;
#[expect(
dead_code,
reason = "Phase 2 migration surface: `macro_metadata_mut`, the three \
provenance `_mut`s, every binding-plane `_mut`, scalar \
`_mut`s, and `strings_mut` are Phase 3 (real incremental \
rebuild body) coverage. Remove this `expect` in the Phase 3 \
landing PR once they are wired up."
)]
pub(crate) trait GraphMutationTarget {
fn nodes(&self) -> &NodeArena;
fn edges(&self) -> &BidirectionalEdgeStore;
fn strings(&self) -> &StringInterner;
fn files(&self) -> &FileRegistry;
fn indices(&self) -> &AuxiliaryIndices;
fn scope_arena(&self) -> &ScopeArena;
fn fact_epoch(&self) -> u64;
fn nodes_mut(&mut self) -> &mut NodeArena;
fn edges_mut(&mut self) -> &mut BidirectionalEdgeStore;
fn strings_mut(&mut self) -> &mut StringInterner;
fn files_mut(&mut self) -> &mut FileRegistry;
fn indices_mut(&mut self) -> &mut AuxiliaryIndices;
fn macro_metadata_mut(&mut self) -> &mut NodeMetadataStore;
fn node_provenance_mut(&mut self) -> &mut NodeProvenanceStore;
fn edge_provenance_mut(&mut self) -> &mut EdgeProvenanceStore;
fn file_segments_mut(&mut self) -> &mut FileSegmentTable;
fn scope_arena_mut(&mut self) -> &mut ScopeArena;
fn alias_table_mut(&mut self) -> &mut AliasTable;
fn shadow_table_mut(&mut self) -> &mut ShadowTable;
fn scope_provenance_store_mut(&mut self) -> &mut ScopeProvenanceStore;
fn set_scope_arena(&mut self, arena: ScopeArena);
fn set_alias_table(&mut self, table: AliasTable);
fn set_shadow_table(&mut self, table: ShadowTable);
fn set_scope_provenance_store(&mut self, store: ScopeProvenanceStore);
fn fact_epoch_mut(&mut self) -> &mut u64;
fn epoch_mut(&mut self) -> &mut u64;
fn confidence_mut(&mut self) -> &mut HashMap<String, ConfidenceMetadata>;
fn nodes_and_strings_mut(&mut self) -> (&mut NodeArena, &mut StringInterner);
fn nodes_and_indices_mut(&mut self) -> (&NodeArena, &mut AuxiliaryIndices);
}
use crate::graph::unified::concurrent::CodeGraph;
use std::sync::Arc;
impl GraphMutationTarget for CodeGraph {
fn nodes(&self) -> &NodeArena {
CodeGraph::nodes(self)
}
fn edges(&self) -> &BidirectionalEdgeStore {
CodeGraph::edges(self)
}
fn strings(&self) -> &StringInterner {
CodeGraph::strings(self)
}
fn files(&self) -> &FileRegistry {
CodeGraph::files(self)
}
fn indices(&self) -> &AuxiliaryIndices {
CodeGraph::indices(self)
}
fn scope_arena(&self) -> &ScopeArena {
CodeGraph::scope_arena(self)
}
fn fact_epoch(&self) -> u64 {
CodeGraph::fact_epoch(self)
}
fn nodes_mut(&mut self) -> &mut NodeArena {
CodeGraph::nodes_mut(self)
}
fn edges_mut(&mut self) -> &mut BidirectionalEdgeStore {
CodeGraph::edges_mut(self)
}
fn strings_mut(&mut self) -> &mut StringInterner {
CodeGraph::strings_mut(self)
}
fn files_mut(&mut self) -> &mut FileRegistry {
CodeGraph::files_mut(self)
}
fn indices_mut(&mut self) -> &mut AuxiliaryIndices {
CodeGraph::indices_mut(self)
}
fn macro_metadata_mut(&mut self) -> &mut NodeMetadataStore {
CodeGraph::macro_metadata_mut(self)
}
fn node_provenance_mut(&mut self) -> &mut NodeProvenanceStore {
Arc::make_mut(&mut self.node_provenance)
}
fn edge_provenance_mut(&mut self) -> &mut EdgeProvenanceStore {
Arc::make_mut(&mut self.edge_provenance)
}
fn file_segments_mut(&mut self) -> &mut FileSegmentTable {
CodeGraph::file_segments_mut(self)
}
fn scope_arena_mut(&mut self) -> &mut ScopeArena {
Arc::make_mut(&mut self.scope_arena)
}
fn alias_table_mut(&mut self) -> &mut AliasTable {
Arc::make_mut(&mut self.alias_table)
}
fn shadow_table_mut(&mut self) -> &mut ShadowTable {
Arc::make_mut(&mut self.shadow_table)
}
fn scope_provenance_store_mut(&mut self) -> &mut ScopeProvenanceStore {
Arc::make_mut(&mut self.scope_provenance_store)
}
fn set_scope_arena(&mut self, arena: ScopeArena) {
CodeGraph::set_scope_arena(self, arena);
}
fn set_alias_table(&mut self, table: AliasTable) {
CodeGraph::set_alias_table(self, table);
}
fn set_shadow_table(&mut self, table: ShadowTable) {
CodeGraph::set_shadow_table(self, table);
}
fn set_scope_provenance_store(&mut self, store: ScopeProvenanceStore) {
CodeGraph::set_scope_provenance_store(self, store);
}
fn fact_epoch_mut(&mut self) -> &mut u64 {
&mut self.fact_epoch
}
fn epoch_mut(&mut self) -> &mut u64 {
&mut self.epoch
}
fn confidence_mut(&mut self) -> &mut HashMap<String, ConfidenceMetadata> {
&mut self.confidence
}
fn nodes_and_strings_mut(&mut self) -> (&mut NodeArena, &mut StringInterner) {
CodeGraph::nodes_and_strings_mut(self)
}
fn nodes_and_indices_mut(&mut self) -> (&NodeArena, &mut AuxiliaryIndices) {
let Self { nodes, indices, .. } = self;
(&**nodes, Arc::make_mut(indices))
}
}
use crate::graph::unified::rebuild::rebuild_graph::RebuildGraph;
impl GraphMutationTarget for RebuildGraph {
fn nodes(&self) -> &NodeArena {
&self.nodes
}
fn edges(&self) -> &BidirectionalEdgeStore {
&self.edges
}
fn strings(&self) -> &StringInterner {
&self.strings
}
fn files(&self) -> &FileRegistry {
&self.files
}
fn indices(&self) -> &AuxiliaryIndices {
&self.indices
}
fn scope_arena(&self) -> &ScopeArena {
&self.scope_arena
}
fn fact_epoch(&self) -> u64 {
self.fact_epoch
}
fn nodes_mut(&mut self) -> &mut NodeArena {
&mut self.nodes
}
fn edges_mut(&mut self) -> &mut BidirectionalEdgeStore {
&mut self.edges
}
fn strings_mut(&mut self) -> &mut StringInterner {
&mut self.strings
}
fn files_mut(&mut self) -> &mut FileRegistry {
&mut self.files
}
fn indices_mut(&mut self) -> &mut AuxiliaryIndices {
&mut self.indices
}
fn macro_metadata_mut(&mut self) -> &mut NodeMetadataStore {
&mut self.macro_metadata
}
fn node_provenance_mut(&mut self) -> &mut NodeProvenanceStore {
&mut self.node_provenance
}
fn edge_provenance_mut(&mut self) -> &mut EdgeProvenanceStore {
&mut self.edge_provenance
}
fn file_segments_mut(&mut self) -> &mut FileSegmentTable {
&mut self.file_segments
}
fn scope_arena_mut(&mut self) -> &mut ScopeArena {
&mut self.scope_arena
}
fn alias_table_mut(&mut self) -> &mut AliasTable {
&mut self.alias_table
}
fn shadow_table_mut(&mut self) -> &mut ShadowTable {
&mut self.shadow_table
}
fn scope_provenance_store_mut(&mut self) -> &mut ScopeProvenanceStore {
&mut self.scope_provenance_store
}
fn set_scope_arena(&mut self, arena: ScopeArena) {
self.scope_arena = arena;
}
fn set_alias_table(&mut self, table: AliasTable) {
self.alias_table = table;
}
fn set_shadow_table(&mut self, table: ShadowTable) {
self.shadow_table = table;
}
fn set_scope_provenance_store(&mut self, store: ScopeProvenanceStore) {
self.scope_provenance_store = store;
}
fn fact_epoch_mut(&mut self) -> &mut u64 {
&mut self.fact_epoch
}
fn epoch_mut(&mut self) -> &mut u64 {
&mut self.epoch
}
fn confidence_mut(&mut self) -> &mut HashMap<String, ConfidenceMetadata> {
&mut self.confidence
}
fn nodes_and_strings_mut(&mut self) -> (&mut NodeArena, &mut StringInterner) {
let Self { nodes, strings, .. } = self;
(nodes, strings)
}
fn nodes_and_indices_mut(&mut self) -> (&NodeArena, &mut AuxiliaryIndices) {
let Self { nodes, indices, .. } = self;
(nodes, indices)
}
}