fallow_engine/
trace_chain.rs1use fallow_config::ResolvedConfig;
4
5use crate::{EngineError, EngineResult, core_backend, session::AnalysisSession};
6
7use fallow_types::trace_chain::{SymbolChainQuery, SymbolChainTrace};
8
9pub fn trace_symbol_chain(
16 config: &ResolvedConfig,
17 query: SymbolChainQuery<'_>,
18) -> EngineResult<Option<SymbolChainTrace>> {
19 let session = AnalysisSession::from_resolved_config(config.clone());
20 trace_symbol_chain_with_session(&session, query)
21}
22
23pub fn trace_symbol_chain_with_session(
30 session: &AnalysisSession,
31 query: SymbolChainQuery<'_>,
32) -> EngineResult<Option<SymbolChainTrace>> {
33 let output = session.analyze_dead_code_with_artifacts(true, true)?;
34 let graph = output
35 .graph
36 .as_ref()
37 .ok_or_else(|| EngineError::new("trace requires a retained module graph"))?;
38 let modules = output.modules.as_deref().unwrap_or(&[]);
39 Ok(core_backend::trace_symbol_chain(
40 graph.as_graph(),
41 modules,
42 session.root(),
43 query,
44 ))
45}