Skip to main content

CodeGraph

Struct CodeGraph 

Source
pub struct CodeGraph { /* private fields */ }
Expand description

Core graph with Arc-wrapped internals for O(1) CoW snapshots.

CodeGraph uses Arc for all internal components, enabling:

  • O(1) snapshot creation via Arc cloning
  • Copy-on-write semantics via Arc::make_mut
  • Memory-efficient sharing between snapshots

§Design

The Arc wrapping enables the MVCC pattern:

  • Readers see a consistent snapshot at the time they acquired access
  • Writers use Arc::make_mut to get exclusive copies only when mutating
  • Multiple snapshots can coexist without copying data

§Performance

  • Snapshot creation: O(5) Arc clones ≈ <1μs
  • Read access: Direct Arc dereference, no locking
  • Write access: Arc::make_mut clones only if refcount > 1

Implementations§

Source§

impl CodeGraph

Source

pub fn new() -> Self

Creates a new empty CodeGraph.

§Example
use sqry_core::graph::unified::concurrent::CodeGraph;

let graph = CodeGraph::new();
assert_eq!(graph.epoch(), 0);
Source

pub fn from_components( nodes: NodeArena, edges: BidirectionalEdgeStore, strings: StringInterner, files: FileRegistry, indices: AuxiliaryIndices, macro_metadata: NodeMetadataStore, ) -> Self

Creates a CodeGraph from existing components.

This is useful when building a graph from external data or reconstructing from serialized state.

Source

pub fn snapshot(&self) -> GraphSnapshot

Creates a cheap snapshot of the graph.

This operation is O(5) Arc clones, which completes in <1μs. The snapshot is isolated from future mutations to the original graph.

§Example
use sqry_core::graph::unified::concurrent::CodeGraph;

let graph = CodeGraph::new();
let snapshot = graph.snapshot();
// snapshot is independent of future mutations to graph
Source

pub fn nodes(&self) -> &NodeArena

Returns a reference to the node arena.

Source

pub fn edges(&self) -> &BidirectionalEdgeStore

Returns a reference to the bidirectional edge store.

Source

pub fn strings(&self) -> &StringInterner

Returns a reference to the string interner.

Source

pub fn files(&self) -> &FileRegistry

Returns a reference to the file registry.

Source

pub fn indices(&self) -> &AuxiliaryIndices

Returns a reference to the auxiliary indices.

Source

pub fn macro_metadata(&self) -> &NodeMetadataStore

Returns a reference to the macro boundary metadata store.

Source

pub fn fact_epoch(&self) -> u64

Returns the monotonic fact-layer epoch stamped on the most recently saved or loaded snapshot. Returns 0 for graphs that have not been persisted yet or were loaded from V7 snapshots.

Source

pub fn node_provenance(&self, id: NodeId) -> Option<&NodeProvenance>

Looks up node provenance by NodeId.

Returns None if the NodeId is out of range, the slot is vacant, or the stored generation does not match (stale handle).

Source

pub fn edge_provenance(&self, id: EdgeId) -> Option<&EdgeProvenance>

Looks up edge provenance by EdgeId.

Returns None if the EdgeId is out of range, the slot is vacant, or the edge is the invalid sentinel.

Source

pub fn file_provenance(&self, id: FileId) -> Option<FileProvenanceView<'_>>

Returns a borrowed provenance view for a file.

Returns None for invalid/unregistered FileIds.

Source

pub fn epoch(&self) -> u64

Returns the current epoch.

Source

pub fn nodes_mut(&mut self) -> &mut NodeArena

Returns a mutable reference to the node arena.

Uses Arc::make_mut for copy-on-write semantics: if other references exist (e.g., snapshots), the data is cloned.

Source

pub fn edges_mut(&mut self) -> &mut BidirectionalEdgeStore

Returns a mutable reference to the bidirectional edge store.

Uses Arc::make_mut for copy-on-write semantics.

Source

pub fn strings_mut(&mut self) -> &mut StringInterner

Returns a mutable reference to the string interner.

Uses Arc::make_mut for copy-on-write semantics.

Source

pub fn files_mut(&mut self) -> &mut FileRegistry

Returns a mutable reference to the file registry.

Uses Arc::make_mut for copy-on-write semantics.

Source

pub fn indices_mut(&mut self) -> &mut AuxiliaryIndices

Returns a mutable reference to the auxiliary indices.

Uses Arc::make_mut for copy-on-write semantics.

Source

pub fn macro_metadata_mut(&mut self) -> &mut NodeMetadataStore

Returns a mutable reference to the macro boundary metadata store.

Uses Arc::make_mut for copy-on-write semantics.

Source

pub fn nodes_and_strings_mut(&mut self) -> (&mut NodeArena, &mut StringInterner)

Returns mutable references to both the node arena and the string interner.

This avoids the borrow-conflict that arises when calling nodes_mut() and strings_mut() separately on &mut self.

Source

pub fn rebuild_indices(&mut self)

Rebuilds auxiliary indices from the current node arena.

This avoids the borrow conflict that arises when calling nodes() and indices_mut() separately on &mut self. Uses disjoint field borrowing to access nodes (shared) and indices (mutable) simultaneously. Internally calls AuxiliaryIndices::build_from_arena which clears existing indices and rebuilds in a single pass without per-element duplicate checking.

Source

pub fn bump_epoch(&mut self) -> u64

Increments the epoch counter and returns the new value.

Called automatically by ConcurrentCodeGraph::write().

Source

pub fn set_epoch(&mut self, epoch: u64)

Sets the epoch to a specific value.

This is primarily for testing or reconstruction from serialized state.

Source

pub fn node_count(&self) -> usize

Returns the number of nodes in the graph.

This is a convenience method that delegates to nodes().len().

§Example
use sqry_core::graph::unified::concurrent::CodeGraph;

let graph = CodeGraph::new();
assert_eq!(graph.node_count(), 0);
Source

pub fn edge_count(&self) -> usize

Returns the number of edges in the graph (forward direction).

This counts edges in the forward store, including both CSR and delta edges.

§Example
use sqry_core::graph::unified::concurrent::CodeGraph;

let graph = CodeGraph::new();
assert_eq!(graph.edge_count(), 0);
Source

pub fn is_empty(&self) -> bool

Returns true if the graph contains no nodes.

This is a convenience method that delegates to nodes().is_empty().

§Example
use sqry_core::graph::unified::concurrent::CodeGraph;

let graph = CodeGraph::new();
assert!(graph.is_empty());
Source

pub fn indexed_files(&self) -> impl Iterator<Item = (FileId, &Path)>

Returns an iterator over all indexed file paths.

This is useful for enumerating all files that have been processed and added to the graph.

§Example
use sqry_core::graph::unified::concurrent::CodeGraph;

let graph = CodeGraph::new();
for (file_id, path) in graph.indexed_files() {
    println!("File {}: {}", file_id.index(), path.display());
}
Source

pub fn confidence(&self) -> &HashMap<String, ConfidenceMetadata>

Returns the per-language confidence metadata.

This contains analysis confidence information collected during graph build, primarily used by language plugins (e.g., Rust) to track analysis quality.

Source

pub fn merge_confidence(&mut self, language: &str, metadata: ConfidenceMetadata)

Merges confidence metadata for a language.

If confidence already exists for the language, this merges the new metadata (taking the lower confidence level and combining limitations). Otherwise, it inserts the new confidence.

Source

pub fn set_confidence( &mut self, confidence: HashMap<String, ConfidenceMetadata>, )

Sets the confidence metadata map directly.

This is primarily used when loading a graph from serialized state.

Trait Implementations§

Source§

impl Clone for CodeGraph

Source§

fn clone(&self) -> CodeGraph

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CodeGraph

Source§

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

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

impl Default for CodeGraph

Source§

fn default() -> Self

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

impl GraphMemorySize for CodeGraph

Source§

fn heap_bytes(&self) -> usize

Estimates the total heap bytes owned by this CodeGraph.

Sums heap usage across every component the graph owns: node arena, bidirectional edge store (forward + reverse CSR + tombstones + delta buffer), string interner, file registry, auxiliary indices, sparse macro/classpath metadata, provenance stores, and the per-language confidence map. Used by the sqryd daemon’s admission controller and workspace retention reaper to enforce memory budgets.

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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