Skip to main content

nusy_codegraph/
lib.rs

1//! nusy-codegraph — Code as a live Arrow object graph.
2//!
3//! Parses Python source files via tree-sitter into CodeNodes (functions, classes,
4//! modules) and CodeEdges (calls, imports, inheritance, containment). All data
5//! stored as Arrow RecordBatches for zero-copy query and versioning via nusy-arrow-git.
6//!
7//! # Architecture
8//!
9//! ```text
10//! Python source → tree-sitter CST → CodeNodes + CodeEdges → Arrow RecordBatches
11//!                                     ↓
12//!                              NameResolver (cross-file edge extraction)
13//! ```
14
15pub mod build_cache;
16pub mod cargo_parser;
17pub mod crate_graph;
18pub mod crate_schema;
19pub mod edges;
20pub mod embeddings;
21pub mod executor;
22pub mod git_tools;
23pub mod impact;
24pub mod ingest;
25pub mod ingest_pipeline;
26pub mod mcp_bridge;
27pub mod mcp_tools;
28pub mod metrics;
29pub mod module_resolver;
30pub mod nats_service;
31pub mod nats_sync;
32pub mod parser;
33pub mod python_parser;
34pub mod python_resolver;
35pub mod rename;
36pub mod rust_parser;
37pub mod schema;
38pub mod scip_calls;
39pub mod search;
40pub mod semantic_diff;
41pub mod test_discovery;
42pub mod topo_sort;
43
44// Re-export primary types
45pub use edges::{NameResolver, extract_call_edges, extract_cross_file_edges, extract_edges};
46pub use embeddings::{
47    EmbeddingProvider, HashEmbeddingProvider, SearchResult, attach_embeddings, cosine_similarity,
48    embed_nodes, semantic_search,
49};
50pub use executor::{ExecutionResult, ExecutorError, execute_object};
51pub use git_tools::{
52    CodeConflict, CodeDiffChangeType, CodeDiffEntry, CodeDiffResult, CodeMergeResult, MergeWarning,
53    SmartMergeResult, codegraph_diff, codegraph_merge, smart_merge,
54};
55pub use impact::{ChangedNode, ImpactReport, ImpactStats, format_impact_report, impact_analysis};
56pub use ingest::{
57    IngestResult, Language, callers_of, ingest_directory, ingest_files, ingest_python_directory,
58    nodes_in_file,
59};
60pub use ingest_pipeline::{
61    GraphViolations, WorkspaceIngestResult, discover_workspace_crates, ingest_workspace,
62    verify_graph, write_graph_parquet,
63};
64pub use mcp_tools::{
65    McpToolError, NodeUpdate, QueryFilter, QueryResult, codegraph_add_edge,
66    codegraph_query_objects, codegraph_remove_edge, codegraph_update_object,
67};
68pub use metrics::{
69    CodebaseMetrics, FileCoverage, compute_codebase_metrics, enrich_with_coverage,
70    enrich_with_git_timestamps, high_complexity_nodes, largest_nodes, low_coverage_nodes,
71    parse_coverage_json,
72};
73pub use module_resolver::RustModuleResolver;
74pub use parser::{ImportInfo, ParseError, ParseResult, parse_python_file};
75pub use python_parser::{PythonParseResult, PythonParser, PythonParserError};
76pub use python_resolver::PythonModuleResolver;
77pub use rename::{RenameError, rename_node};
78pub use rust_parser::parse_rust_file;
79pub use schema::{
80    CodeEdge, CodeEdgePredicate, CodeNode, CodeNodeKind, build_code_edges_batch,
81    build_code_nodes_batch, code_edges_schema, code_nodes_schema, extract_file_path,
82};
83pub use scip_calls::{ScipCallResult, extract_scip_call_edges};
84pub use search::{
85    CodeSearch, callees, callers, children_of, find_sources, find_targets, search_nodes, tests_for,
86    transitive_callers, transitive_deps,
87};
88pub use semantic_diff::{
89    AffectedEdge, AffectedReason, ChangeClassification, DiffStats, SemanticDiff, SemanticDiffEntry,
90    format_semantic_diff, semantic_diff,
91};
92pub use topo_sort::{
93    ParallelismStats, crate_parallelism_stats, sort_crates, sort_crates_parallel,
94    sort_functions_in_crate, sort_functions_parallel,
95};