elm-ast 0.2.1

A syn-quality Rust library for parsing and constructing Elm 0.19.1 ASTs
Documentation
fn main() {
    let path = std::env::args()
        .nth(1)
        .expect("usage: roundtrip_debug <file.elm>");
    let source = std::fs::read_to_string(&path).expect("failed to read file");
    let ast = elm_ast::parse(&source).expect("failed to parse");
    let printed = elm_ast::print::print(&ast);

    match elm_ast::parse(&printed) {
        Ok(_) => {
            println!("Round-trip OK for {path}");
        }
        Err(errors) => {
            println!("Round-trip FAILED for {path}");
            for e in &errors {
                println!("  {e}");
            }
            let lines: Vec<&str> = printed.lines().collect();
            for e in &errors {
                let line = e.span.start.line as usize;
                let start = line.saturating_sub(3);
                let end = (line + 2).min(lines.len());
                println!("\n--- context around line {line} ---");
                for (i, ln) in lines[start..end].iter().enumerate() {
                    let line_num = start + i;
                    let marker = if line_num + 1 == line { ">>>" } else { "   " };
                    println!("{marker} {:>4}: {}", line_num + 1, ln);
                }
            }
        }
    }
}