mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 04:24:43 +00:00
impl Error for CompileError
This commit is contained in:
parent
7fad8d9eee
commit
792c0ca3b4
3 changed files with 22 additions and 2 deletions
|
@ -564,6 +564,19 @@ pub trait ErrorDisplay {
|
|||
}
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! impl_display_and_error {
|
||||
($Strc: ident) => {
|
||||
impl std::fmt::Display for $Strc {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
$crate::error::ErrorDisplay::format(self, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl std::error::Error for $Strc {}
|
||||
};
|
||||
}
|
||||
|
||||
pub trait MultiErrorDisplay<Item: ErrorDisplay>: Stream<Item> {
|
||||
fn fmt_all_stderr(&self) {
|
||||
for err in self.iter() {
|
||||
|
|
|
@ -8,7 +8,10 @@ use erg_common::error::{ErrorCore, ErrorDisplay, ErrorKind::*, Location, MultiEr
|
|||
use erg_common::set::Set;
|
||||
use erg_common::traits::{Locational, Stream};
|
||||
use erg_common::vis::Visibility;
|
||||
use erg_common::{fmt_iter, fmt_option_map, fmt_vec, impl_stream_for_wrapper, switch_lang, Str};
|
||||
use erg_common::{
|
||||
fmt_iter, fmt_option_map, fmt_vec, impl_display_and_error, impl_stream_for_wrapper,
|
||||
switch_lang, Str,
|
||||
};
|
||||
|
||||
use erg_parser::error::{ParserRunnerError, ParserRunnerErrors};
|
||||
|
||||
|
@ -100,6 +103,8 @@ pub struct CompileError {
|
|||
pub caused_by: AtomicStr,
|
||||
}
|
||||
|
||||
impl_display_and_error!(CompileError);
|
||||
|
||||
impl From<ParserRunnerError> for CompileError {
|
||||
fn from(err: ParserRunnerError) -> Self {
|
||||
Self {
|
||||
|
|
|
@ -6,7 +6,7 @@ use erg_common::color::{RED, RESET};
|
|||
use erg_common::config::Input;
|
||||
use erg_common::error::{ErrorCore, ErrorDisplay, ErrorKind::*, Location, MultiErrorDisplay};
|
||||
use erg_common::traits::Stream;
|
||||
use erg_common::{impl_stream_for_wrapper, switch_lang};
|
||||
use erg_common::{impl_display_and_error, impl_stream_for_wrapper, switch_lang};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct LexError(ErrorCore);
|
||||
|
@ -144,6 +144,8 @@ pub struct ParserRunnerError {
|
|||
pub input: Input,
|
||||
}
|
||||
|
||||
impl_display_and_error!(ParserRunnerError);
|
||||
|
||||
impl ErrorDisplay for ParserRunnerError {
|
||||
fn core(&self) -> &ErrorCore {
|
||||
&self.core
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue