mirror of
https://forge.katzen.cafe/katzen-cafe/iowo.git
synced 2025-09-25 07:51:30 +02:00
added basic method to check syntax command input
This commit is contained in:
parent
03412ce8cd
commit
3952091018
6 changed files with 251 additions and 7 deletions
57
src/main.rs
57
src/main.rs
|
@ -1,6 +1,61 @@
|
|||
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() {}
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue