Skip to main content

lutra_compiler/
format.rs

1use crate::SourceTree;
2use crate::codespan;
3use crate::error;
4
5pub fn format(source_tree: &SourceTree) -> (Option<error::Error>, Vec<codespan::TextEdit>) {
6    let mut edits = Vec::new();
7    let mut diagnostics = Vec::new();
8
9    for id in source_tree.get_ids() {
10        let (_path, content) = source_tree.get_by_id(id).unwrap();
11
12        let (parsed, diags, trivia) = crate::parser::parse_source(content, id);
13
14        if diagnostics.is_empty()
15            && let Some(parsed) = parsed
16        {
17            let e = crate::printer::print_source(&parsed, Some(&trivia));
18            edits.extend(codespan::minimize_text_edits(content, e));
19        }
20
21        diagnostics.extend(diags);
22    }
23
24    let err = if diagnostics.is_empty() {
25        None
26    } else {
27        Some(error::Error::from_diagnostics(diagnostics, source_tree))
28    };
29
30    (err, edits)
31}