1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#![doc(html_root_url = "https://docs.rs/gluon_formatter/0.6.1")]
extern crate itertools;
extern crate pretty;
#[macro_use]
extern crate gluon_base as base;
extern crate gluon_parser as parser;
mod pretty_print;
pub fn format_expr(input: &str) -> Result<String, parser::ParseErrors> {
use base::source::Source;
use base::symbol::Symbols;
use base::types::TypeCache;
let newline = match input.find(|c: char| c == '\n' || c == '\r') {
Some(i) => {
if input[i..].starts_with("\r\n") {
"\r\n"
} else if input[i..].starts_with("\r") {
"\r"
} else {
"\n"
}
}
None => "\n",
};
let type_cache = TypeCache::new();
let expr = parser::parse_expr(&mut Symbols::new(), &type_cache, input)?;
let source = Source::new(input);
let arena = pretty::Arena::new();
let printer = pretty_print::Printer::new(&arena, &source);
Ok(printer.format(100, newline, &expr))
}