Skip to main content
Glama

CodeGraph CLI MCP Server

by Jakedismo
enhancer.rs4.9 kB
// ABOUTME: Fast ML enhancer coordinator for sub-millisecond code analysis // ABOUTME: Combines pattern matching and symbol resolution without training requirements use super::{PatternMatcher, SymbolResolver}; use codegraph_core::ExtractionResult; use std::sync::{Arc, Mutex}; use tracing::debug; /// Fast ML enhancer that combines multiple techniques (<1ms total latency) pub struct FastMLEnhancer { pattern_matcher: Arc<PatternMatcher>, symbol_resolver: Arc<Mutex<SymbolResolver>>, } impl FastMLEnhancer { /// Create new enhancer with default configuration pub fn new() -> Self { debug!("🚀 Initializing FastMLEnhancer (sub-millisecond code analysis)"); Self { pattern_matcher: Arc::new(PatternMatcher::new()), symbol_resolver: Arc::new(Mutex::new(SymbolResolver::new())), } } /// Enhance extraction result with fast ML techniques /// /// Total latency: <1ms guaranteed /// - Pattern matching: 50-500ns /// - Symbol resolution: 100-500μs pub fn enhance(&self, result: ExtractionResult, content: &str) -> ExtractionResult { let original_node_count = result.nodes.len(); let original_edge_count = result.edges.len(); // Step 1: Pattern matching (nanoseconds) let mut result = self.pattern_matcher.enhance_extraction(result, content); // Step 2: Symbol resolution (microseconds) if let Ok(mut resolver) = self.symbol_resolver.lock() { resolver.index_symbols(&result); result = resolver.resolve_symbols(result); } let added_edges = result.edges.len() - original_edge_count; if added_edges > 0 { debug!( "✨ FastML: Enhanced {} nodes, added {} edges (total: {} edges)", original_node_count, added_edges, result.edges.len() ); } result } /// Get pattern matcher for advanced usage pub fn pattern_matcher(&self) -> Arc<PatternMatcher> { Arc::clone(&self.pattern_matcher) } /// Get symbol resolver for advanced usage pub fn symbol_resolver(&self) -> Arc<Mutex<SymbolResolver>> { Arc::clone(&self.symbol_resolver) } } impl Default for FastMLEnhancer { fn default() -> Self { Self::new() } } /// Global FastML enhancer instance (lazy-initialized) static FAST_ML_ENHANCER: std::sync::OnceLock<FastMLEnhancer> = std::sync::OnceLock::new(); /// Get or initialize the global FastML enhancer pub fn get_fast_ml_enhancer() -> &'static FastMLEnhancer { FAST_ML_ENHANCER.get_or_init(|| { debug!("🔧 Initializing global FastMLEnhancer"); FastMLEnhancer::new() }) } /// Enhance extraction result using the global enhancer /// /// This is the main entry point for fast ML enhancement. /// Latency: <1ms total pub fn enhance_extraction(result: ExtractionResult, content: &str) -> ExtractionResult { get_fast_ml_enhancer().enhance(result, content) } #[cfg(test)] mod tests { use super::*; use codegraph_core::CodeNode; #[test] fn test_fast_ml_enhancer() { let enhancer = FastMLEnhancer::new(); let content = r#" use std::collections::HashMap; pub fn test() {} impl Display for MyStruct {} "#; let result = ExtractionResult { nodes: vec![CodeNode::new_test()], edges: vec![], }; let enhanced = enhancer.enhance(result, content); assert!(enhanced.edges.len() > 0, "Should add pattern-based edges"); } #[test] fn test_symbol_resolver_adds_edges() { use codegraph_core::{EdgeRelationship, EdgeType, NodeId}; let enhancer = FastMLEnhancer::new(); // Node "foo" exists; edge points to similar symbol "foo1" that should resolve let node = CodeNode { id: NodeId::new_v4(), name: "foo".into(), ..CodeNode::new_test() }; let edge = EdgeRelationship { from: node.id, to: "foo1".into(), edge_type: EdgeType::Uses, metadata: Default::default(), span: None, }; let result = ExtractionResult { nodes: vec![node], edges: vec![edge], }; let enhanced = enhancer.enhance(result, "fn foo() {}"); assert!( enhanced.edges.len() >= 1, "Symbol resolver should preserve/augment edges" ); } #[test] fn test_global_enhancer() { let content = "use std::io;"; let result = ExtractionResult { nodes: vec![CodeNode::new_test()], edges: vec![], }; let enhanced = enhance_extraction(result, content); // Should work without panicking assert!(enhanced.nodes.len() > 0); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jakedismo/codegraph-rust'

If you have feedback or need assistance with the MCP directory API, please join our Discord server