use only_syntax::{SyntaxSnapshot, snapshot};
use crate::SemanticSnapshot;
use crate::lower::lower_syntax;
use crate::symbols::build_symbol_index;
use crate::validate::validate_document;
pub fn compile_document(source: &str) -> SemanticSnapshot {
compile_syntax(&snapshot(source))
}
pub fn compile_syntax(snapshot: &SyntaxSnapshot) -> SemanticSnapshot {
let (document, mut diagnostics) = lower_syntax(snapshot);
let symbols = build_symbol_index(&document);
diagnostics.extend(validate_document(&document, &symbols));
SemanticSnapshot {
document,
diagnostics,
symbols,
}
}