iowo/src/main.rs

61 lines
1.3 KiB
Rust

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);
}
}
}
}