integrate CodegenError to compiler-core::Error

This commit is contained in:
Jeong YunWon 2022-08-22 18:38:55 +09:00
parent 9d67b944cf
commit 1192a11d39
4 changed files with 24 additions and 22 deletions

View file

@ -1,12 +1,6 @@
use rustpython_compiler_core::Location;
use std::{error::Error, fmt}; use std::{error::Error, fmt};
#[derive(Debug)] pub type CodegenError = rustpython_compiler_core::Error<CodegenErrorType>;
pub struct CodegenError {
pub error: CodegenErrorType,
pub location: Location,
pub source_path: String,
}
#[derive(Debug)] #[derive(Debug)]
#[non_exhaustive] #[non_exhaustive]
@ -87,15 +81,3 @@ impl fmt::Display for CodegenErrorType {
} }
impl Error for CodegenErrorType {} impl Error for CodegenErrorType {}
impl fmt::Display for CodegenError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.location.fmt_with(f, &self.error)
}
}
impl Error for CodegenError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
None
}
}

View file

@ -1,3 +1,5 @@
use std::fmt::Display;
use crate::Location; use crate::Location;
#[derive(Debug, PartialEq, Eq)] #[derive(Debug, PartialEq, Eq)]
@ -15,6 +17,24 @@ impl<T> std::ops::Deref for Error<T> {
} }
} }
impl<T> std::error::Error for Error<T>
where
T: std::fmt::Display + std::fmt::Debug,
{
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
None
}
}
impl<T> Display for Error<T>
where
T: std::fmt::Display,
{
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.location.fmt_with(f, &self.error)
}
}
impl<T> Error<T> { impl<T> Error<T> {
pub fn error(self) -> T { pub fn error(self) -> T {
self.error self.error

View file

@ -193,7 +193,7 @@ impl ParseError {
impl fmt::Display for ParseError { impl fmt::Display for ParseError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.location.fmt_with(f, &self.error) self.0.fmt(f)
} }
} }

View file

@ -11,7 +11,7 @@ pub use rustpython_codegen::compile::CompileOpts;
pub use rustpython_compiler_core::Mode; pub use rustpython_compiler_core::Mode;
#[derive(Debug, thiserror::Error)] #[derive(Debug, thiserror::Error)]
pub enum CodegenErrorType { pub enum CompileErrorType {
#[error(transparent)] #[error(transparent)]
Compile(#[from] rustpython_codegen::error::CodegenErrorType), Compile(#[from] rustpython_codegen::error::CodegenErrorType),
#[error(transparent)] #[error(transparent)]
@ -20,7 +20,7 @@ pub enum CodegenErrorType {
#[derive(Debug, thiserror::Error)] #[derive(Debug, thiserror::Error)]
pub struct CompileError { pub struct CompileError {
pub error: CodegenErrorType, pub error: CompileErrorType,
pub source_path: String, pub source_path: String,
pub location: Location, pub location: Location,
pub statement: Option<String>, pub statement: Option<String>,