Skip to main content

only_semantic/
analysis.rs

1use only_syntax::{SyntaxSnapshot, snapshot};
2
3use crate::SemanticSnapshot;
4use crate::lower::lower_syntax;
5use crate::symbols::build_symbol_index;
6use crate::validate::validate_document;
7
8/// Compiles source text into a semantic snapshot shared by hosts.
9///
10/// Args:
11/// source: Raw Onlyfile source text.
12///
13/// Returns:
14/// Immutable semantic snapshot with AST, diagnostics and symbols.
15pub fn compile_document(source: &str) -> SemanticSnapshot {
16    compile_syntax(&snapshot(source))
17}
18
19/// Compiles a pre-parsed syntax snapshot into a semantic snapshot shared by hosts.
20///
21/// Args:
22/// snapshot: Immutable syntax snapshot for one source version.
23///
24/// Returns:
25/// Immutable semantic snapshot with AST, diagnostics and symbols.
26pub fn compile_syntax(snapshot: &SyntaxSnapshot) -> SemanticSnapshot {
27    let (document, mut diagnostics) = lower_syntax(snapshot);
28    let symbols = build_symbol_index(&document);
29    diagnostics.extend(validate_document(&document, &symbols));
30
31    SemanticSnapshot {
32        document,
33        diagnostics,
34        symbols,
35    }
36}