fallow_engine/
trace_chain.rs1use fallow_config::ResolvedConfig;
4
5use crate::{EngineError, EngineResult, session::AnalysisSession};
6
7use fallow_types::trace_chain::{SymbolChainQuery, SymbolChainTrace};
8
9#[expect(
10 unused_imports,
11 reason = "engine owns a copied trace-chain implementation whose internal pub uses serve its tests"
12)]
13#[path = "trace_chain_impl.rs"]
14mod trace_chain_impl;
15
16pub fn trace_symbol_chain(
23 config: &ResolvedConfig,
24 query: SymbolChainQuery<'_>,
25) -> EngineResult<Option<SymbolChainTrace>> {
26 let session = AnalysisSession::from_resolved_config(config.clone());
27 trace_symbol_chain_with_session(&session, query)
28}
29
30pub fn trace_symbol_chain_with_session(
37 session: &AnalysisSession,
38 query: SymbolChainQuery<'_>,
39) -> EngineResult<Option<SymbolChainTrace>> {
40 let output = session.analyze_dead_code_with_artifacts(true, true)?;
41 let graph = output
42 .graph
43 .as_ref()
44 .ok_or_else(|| EngineError::new("trace requires a retained module graph"))?;
45 let modules = output.modules.as_deref().unwrap_or(&[]);
46 Ok(trace_chain_impl::trace_symbol_chain(
47 graph.as_graph(),
48 modules,
49 session.root(),
50 query,
51 ))
52}