mod manifest;
mod resolve;
mod validate;
pub use brink_ir::FileId;
pub use brink_ir::ResolutionMap;
use brink_ir::{Diagnostic, HirFile, SymbolIndex, SymbolManifest};
#[derive(Debug, Clone)]
pub struct AnalysisResult {
pub index: SymbolIndex,
pub resolutions: ResolutionMap,
pub diagnostics: Vec<Diagnostic>,
}
pub fn analyze(files: &[(FileId, &HirFile, &SymbolManifest)]) -> AnalysisResult {
let manifest_inputs: Vec<(FileId, &SymbolManifest)> = files
.iter()
.map(|&(id, _hir, manifest)| (id, manifest))
.collect();
let hir_inputs: Vec<(FileId, &HirFile)> = files.iter().map(|&(id, hir, _)| (id, hir)).collect();
let (index, mut diagnostics) = manifest::merge_manifests(&manifest_inputs);
let (resolutions, resolve_diags) = resolve::resolve_refs(&index, &manifest_inputs);
diagnostics.extend(resolve_diags);
diagnostics.extend(validate::validate(&hir_inputs));
AnalysisResult {
index,
resolutions,
diagnostics,
}
}