From 5c11aa72239ecbdd9577f027bdc7e9468d68414e Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 4 Feb 2020 11:22:00 +0100 Subject: =?UTF-8?q?Adapt=20for=20tonty=20and=20fix=20a=20few=20bugs=20?= =?UTF-8?q?=F0=9F=9A=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/error.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/error.rs') diff --git a/src/error.rs b/src/error.rs index 1eb48deb..3a095eef 100644 --- a/src/error.rs +++ b/src/error.rs @@ -35,3 +35,38 @@ impl Error { Error { message: message.into(), severity } } } + +/// Construct an error with formatted message and optionally severity and / or +/// span. +/// +/// # Examples +/// ``` +/// # use typstc::err; +/// # use typstc::syntax::span::Span; +/// # let span = Span::ZERO; +/// # let value = 0; +/// +/// // With span and default severity `Error`. +/// err!(span; "the wrong {}", value); +/// +/// // With no span and severity `Warning`. +/// err!(@Warning: span; "non-fatal!"); +/// +/// // Without span and default severity. +/// err!("no spans here ..."); +/// ``` +#[macro_export] +macro_rules! err { + (@$severity:ident: $span:expr; $($args:tt)*) => { + $crate::syntax::span::Spanned { v: err!(@$severity: $($args)*), span: $span } + }; + + (@$severity:ident: $($args:tt)*) => { + $crate::error::Error { + message: format!($($args)*), + severity: $crate::error::Severity::$severity, + } + }; + + ($($tts:tt)*) => { err!(@Error: $($tts)*) }; +} -- cgit v1.2.3