pub struct AnalyzeCtx<'a> {
pub provider: &'a dyn SourceProvider,
pub kinds: &'a [StepKindSpec],
pub kind_to_engine: &'a BTreeMap<String, String>,
pub env: &'a BTreeMap<String, String>,
pub config_vars: &'a BTreeMap<String, String>,
pub run_id: &'a str,
pub fragments: &'a FragmentCorpus,
}Expand description
Everything analyze_suite needs, injected at the IO edge (sans-IO core).
Fields§
§provider: &'a dyn SourceProviderThe source of feature and pack bytes (the IO edge lives behind it).
kinds: &'a [StepKindSpec]Registered engine step kinds (drives pack validation and artifact probes).
kind_to_engine: &'a BTreeMap<String, String>Step-kind prefix → engine id, the lowering routing table.
env: &'a BTreeMap<String, String>Injected environment snapshot (${env:…}).
config_vars: &'a BTreeMap<String, String>Injected proef.toml config scope (${url:…} / ${vars:…}), with the
active [env.<name>] already deep-merged in.
run_id: &'a strInjected run identifier (${run:id}).
fragments: &'a FragmentCorpusThe fragment corpus (ADR-0018), read by the caller.
Injected rather than built here, for the same reason every other input is: core performs no IO. It also fixes what building it internally cost — a fresh corpus means a fresh scan memo, so the LSP re-read and re-hurl-parsed the whole corpus on every request: each completion popup, each go-to-definition, each debounce tick. The caller holds one and rebuilds it only when a fragment file actually changes.