Implement Display for Tracepoint

This commit is contained in:
Laurenz 2021-09-29 00:10:39 +02:00
parent a0065eef86
commit 989d344d3d
2 changed files with 16 additions and 9 deletions

View File

@ -1,5 +1,7 @@
//! Diagnostics.
use std::fmt::{self, Display, Formatter};
use serde::{Deserialize, Serialize};
use crate::syntax::{Span, Spanned};
@ -59,6 +61,18 @@ pub enum Tracepoint {
Import,
}
impl Display for Tracepoint {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
match self {
Tracepoint::Call(Some(name)) => {
write!(f, "error occured in this call of function `{}`", name)
}
Tracepoint::Call(None) => f.pad("error occured in this function call"),
Tracepoint::Import => f.pad("error occured while importing this module"),
}
}
}
/// Convert a [`StrResult`] to a [`TypResult`] by adding span information.
pub trait At<T> {
/// Add the span information.

View File

@ -9,7 +9,7 @@ use codespan_reporting::term::{self, termcolor, Config, Styles};
use same_file::is_same_file;
use termcolor::{ColorChoice, StandardStream, WriteColor};
use typst::diag::{Error, Tracepoint};
use typst::diag::Error;
use typst::source::SourceStore;
fn main() {
@ -136,14 +136,7 @@ fn print_diagnostics(
// Stacktrace-like helper diagnostics.
for point in error.trace {
let message = match point.v {
Tracepoint::Call(Some(name)) => {
format!("error occured in this call of function `{}`", name)
}
Tracepoint::Call(None) => "error occured in this function call".into(),
Tracepoint::Import => "error occured while importing this module".into(),
};
let message = point.v.to_string();
let help = Diagnostic::help().with_message(message).with_labels(vec![
Label::primary(point.span.source, point.span.to_range()),
]);