ezno-parser 0.0.5

Parser and AST definitions for Ezno
Documentation
use std::time::Instant;

use ezno_parser::{ASTNode, FromFileError, Module, ParseOptions, ToStringOptions};

fn main() -> Result<(), Box<dyn std::error::Error>> {
	let path = std::env::args().skip(1).next().ok_or("expected argument")?;
	let now = Instant::now();
	let mut fs = source_map::MapFileStore::<source_map::NoPathMap>::default();
	let result = Module::from_file(&path, ParseOptions::default(), &mut fs);
	match result {
		Ok(module) => {
			println!("Parsed in: {:?}", now.elapsed());
			if std::env::args().any(|item| item == "--ast") {
				println!("{module:#?}");
			} else {
				let output = module.to_string(&ToStringOptions::default());
				println!("{output}");
			}
			Ok(())
		}
		Err(FromFileError::FileError(_file_err)) => {
			eprintln!("could not find file {path}");
			Err(Box::<dyn std::error::Error>::from("error"))
		}
		Err(FromFileError::ParseError(parse_err, source)) => {
			eprintln!("parse error {}", parse_err.reason);
			eprintln!(
				"error on {:?}",
				parse_err
					.position
					.with_source(source)
					.into_line_column_span::<source_map::encodings::Utf8>(&fs)
			);
			Err(Box::<dyn std::error::Error>::from("error"))
		}
	}
}