better diagnostics

This commit is contained in:
nora 2023-03-04 12:18:11 +01:00
parent 6260ca0307
commit 1734bab8cf
2 changed files with 14 additions and 9 deletions

View file

@ -4,9 +4,7 @@
use std::path::PathBuf;
use ariadne::{Color, Fmt, Label, Report, ReportKind, Source};
use chumsky::prelude::Simple;
use crate::lexer::Token;
use parser::Error;
mod ast;
mod lexer;
@ -29,7 +27,7 @@ pub trait Db: salsa::DbWithJar<Jar> {}
impl<DB> Db for DB where DB: ?Sized + salsa::DbWithJar<Jar> {}
#[salsa::accumulator]
pub struct Diagnostics(Simple<Token>);
pub struct Diagnostics(Error);
#[derive(Default)]
#[salsa::db(crate::Jar)]
@ -60,13 +58,15 @@ fn aa() {}
let db = Database::default();
let source_program = SourceProgram::new(&db, src.to_string(), "uwu.ub".into());
let (file, errors) = parser::parse(&db, source_program);
let file = parser::parse(&db, source_program);
if let Some(file) = file {
println!("{}", pretty::pretty_print_ast(&file));
}
report_errors(src, errors);
let errs = parser::parse::accumulated::<Diagnostics>(&db, source_program);
report_errors(src, errs);
}
fn report_errors(src: &str, errors: Vec<parser::Error>) {

View file

@ -10,7 +10,7 @@ use crate::{
WhileStmt,
},
lexer::Token,
SourceProgram,
Db, Diagnostics, SourceProgram,
};
#[derive(Debug, Clone, PartialEq)]
@ -430,13 +430,18 @@ fn file_parser<'src>(
}
#[salsa::tracked]
pub fn parse(db: &dyn crate::Db, source: SourceProgram) -> (Option<File>, Vec<Error>) {
pub fn parse(db: &dyn Db, source: SourceProgram) -> Option<File> {
let lexer = Token::lexer(source.text(db));
let len = lexer.source().len();
let state = ParserState::default();
let result = file_parser(source.file_name(db).clone(), &state)
let (result, errs) = file_parser(source.file_name(db).clone(), &state)
.parse_recovery_verbose(Stream::from_iter(len..len + 1, lexer.spanned()));
for err in errs {
Diagnostics::push(db, err);
}
result
}