Skip to main content

lisette_format/
lib.rs

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}