use args::Args; use clap::Parser; use codespan_reporting::{ files::{SimpleFile, SimpleFiles}, term::{ self, termcolor::{ColorChoice, StandardStream}, }, }; use syntax::{ check::{self, check}, error::SyntaxError, parse_syntax, PipelineElement, }; mod args; mod builtins; mod lexer; mod namespace; mod syntax; fn main() { let args = dbg!(Args::parse()); let syntax = parse_syntax(&args.text); if args.debug_tokens { println!("Tokens: {syntax:#?}"); } let mut files = SimpleFiles::new(); let input_id = files.add("input", args.text); let writer = StandardStream::stderr(ColorChoice::Always); let config = term::Config::default(); if let Err(errs) = syntax { let writer = &mut writer.lock(); term::emit( writer, &config, &files, &SyntaxError::InvalidToken(errs).to_diagnostic(input_id), ) .unwrap(); } else { let check_res = check(&syntax.unwrap()); if let Err(errs) = check_res { let writer = &mut writer.lock(); let diags = errs.into_iter().map(|err| err.to_diagnostic(input_id)); for diag in diags { term::emit(writer, &config, &files, &diag); } } } }