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}