1mod comments;
2mod formatter;
3mod lindig;
4
5pub use formatter::Formatter;
6
7use comments::Comments;
8use syntax::ParseError;
9use syntax::lex::Lexer;
10use syntax::parse::Parser;
11
12const MAX_LINE_WIDTH: isize = 80;
13const INDENT_WIDTH: isize = 2;
14
15pub fn format_source(source: &str) -> Result<String, Vec<ParseError>> {
16 let lex_result = Lexer::new(source, 0).lex();
17 if lex_result.failed() {
18 return Err(lex_result.errors);
19 }
20
21 let parse_result = Parser::new(lex_result.tokens, source).parse();
22 if parse_result.failed() {
23 return Err(parse_result.errors);
24 }
25
26 let comments = Comments::from_trivia(&lex_result.trivia, source);
27 let mut formatter = Formatter::new(comments);
28 let document = formatter.module(&parse_result.ast);
29 let output = document.to_pretty_string(MAX_LINE_WIDTH);
30
31 Ok(output)
32}