zesterer / ariadne

A fancy diagnostics & error reporting crate
https://crates.io/crates/ariadne
MIT License
1.61k stars 72 forks source link

proposal: add `Report::with_labels` #47

Closed superhawk610 closed 1 year ago

superhawk610 commented 1 year ago

This PR adds Report::with_labels, a chainable equivalent of Report::add_labels. This brings a minor DX improvement for the common use case where a report includes an iterable of errors, such as when parsing input with chumsky.

Before

if let Err(errors) = parser().parse(&input) {
    let mut report =
        Report::build(ReportKind::Error, &filename, 0).with_message("Error parsing file");
    report.add_labels(errors.iter().map(|error| {
        Label::new((&filename, error.span())).with_message(format!("{}", error))
    }));
    report
        .finish()
        .eprint((&filename, Source::from(&input)))
        .unwrap();
}

After

if let Err(errors) = parser().parse(&input) {
    Report::build(ReportKind::Error, &filename, 0)
        .with_message("Error parsing file");
        .with_labels(errors.iter().map(|error| {
            Label::new((&filename, error.span())).with_message(format!("{}", error))
        }))
        .finish()
        .eprint((&filename, Source::from(&input)))
        .unwrap();
}
zesterer commented 1 year ago

This is a nice improvement, thanks!