iowo/src/main.rs

62 lines
1.3 KiB
Rust
Raw Normal View History

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;
2023-11-15 10:55:14 +01:00
mod lexer;
2023-11-18 19:10:28 +01:00
mod namespace;
2023-11-15 10:55:14 +01:00
mod syntax;
2023-11-15 21:13:04 +01:00
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);
}
}
}
}