1mod checker;
5pub mod elements;
6pub mod functions;
7pub mod hir;
8pub mod methods;
9
10use nifty_syntax::ast::File;
11use nifty_syntax::{Diagnostic, Parsed};
12
13#[derive(Debug)]
16pub struct Checked {
17 pub program: hir::Program,
18 pub diagnostics: Vec<Diagnostic>,
19}
20
21#[must_use]
24pub fn check(files: &[&File]) -> Checked {
25 let (program, diagnostics) = checker::check(files);
26 Checked {
27 program,
28 diagnostics,
29 }
30}
31
32pub fn compile(parsed: &[&Parsed]) -> Result<hir::Program, Vec<Diagnostic>> {
40 let syntax_errors: Vec<Diagnostic> = parsed
41 .iter()
42 .flat_map(|file| file.diagnostics.iter().cloned())
43 .collect();
44 if !syntax_errors.is_empty() {
45 return Err(syntax_errors);
46 }
47 let files: Vec<&File> = parsed.iter().map(|file| &file.file).collect();
48 let checked = check(&files);
49 if checked.diagnostics.is_empty() {
50 Ok(checked.program)
51 } else {
52 Err(checked.diagnostics)
53 }
54}
55
56#[cfg(test)]
57mod tests;