maudfmt/
lib.rs

1use anyhow::{Context, Result};
2use crop::Rope;
3
4mod collect;
5mod format;
6mod line_length;
7mod print;
8mod unparse;
9mod vendor;
10
11#[cfg(test)]
12mod testing;
13
14use vendor::ast;
15
16pub use format::FormatOptions;
17
18pub fn try_fmt_file(source: &str, options: &format::FormatOptions) -> Result<String> {
19    let (processed_source, ignore_info) = format::preprocess_source_for_ignore(source);
20
21    let ast = syn::parse_file(&processed_source).context("Failed to parse source")?;
22    let rope = Rope::from(processed_source);
23    let (mut rope, macros) = collect::collect_macros_from_file(&ast, rope, &options.macro_names);
24    let formatted_processed = format::format_source(&mut rope, macros, options);
25
26    // Reinsert ignored lines if any
27    if ignore_info.is_empty() {
28        Ok(formatted_processed)
29    } else {
30        Ok(format::reinsert_ignored_lines_in_source(
31            &formatted_processed,
32            &ignore_info,
33        ))
34    }
35}