2023-11-18 19:46:41 +01:00
|
|
|
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;
|
2023-11-16 19:22:26 +01:00
|
|
|
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
|
|
|
|
2023-11-18 19:46:41 +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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|