fn main() {
let path = std::env::args().nth(1).unwrap_or_else(|| {
eprintln!("Usage: elm_parse <file.elm>");
std::process::exit(1);
});
let source = std::fs::read_to_string(&path).unwrap_or_else(|e| {
eprintln!("Error reading {path}: {e}");
std::process::exit(1);
});
match elm_ast::parse(&source) {
Ok(module) => {
#[cfg(feature = "serde")]
{
let json = serde_json::to_string_pretty(&module).expect("serialize AST");
println!("{json}");
}
#[cfg(not(feature = "serde"))]
{
println!(
"module: {} imports, {} declarations",
module.imports.len(),
module.declarations.len()
);
println!("(enable --features serde for JSON output)");
}
}
Err(errors) => {
eprintln!("Parse errors in {path}:");
for e in &errors {
eprintln!(" {e}");
}
std::process::exit(1);
}
}
}