1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//! Call graph construction with pluggable resolution strategies.
//!
//! The call graph system is fully modular:
//! - Core graph structure is strategy-agnostic
//! - Resolution strategies are plug-and-play
//! - Each signal (types, imports, names) is independent
//! - Strategies can be combined with confidence weighting
//!
//! # Architecture
//!
//! ```text
//! Tags → [Resolvers] → CallGraph → PageRank
//! ↓
//! ┌─────┴─────┐
//! │ Strategies │
//! ├───────────┤
//! │ NameMatch │ ← Always available
//! │ TypeHints │ ← Python, TypeScript
//! │ Imports │ ← Cross-file resolution
//! │ SameFile │ ← Highest confidence
//! └───────────┘
//! ```
//!
//! # Usage
//!
//! ```ignore
//! let mut resolver = CallResolver::new();
//! resolver.add_strategy(Box::new(SameFileStrategy::new()));
//! resolver.add_strategy(Box::new(TypeHintStrategy::new()));
//! resolver.add_strategy(Box::new(NameMatchStrategy::new()));
//!
//! let graph = resolver.build_graph(&tags);
//! ```
pub use ;
pub use ;
pub use ;