Skip to content

Commit

Permalink
refactor: better storage error format (#8909)
Browse files Browse the repository at this point in the history
  • Loading branch information
LingyuCoder authored Dec 31, 2024
1 parent 5cc9bae commit 5d68be6
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 35 deletions.
72 changes: 43 additions & 29 deletions crates/rspack_storage/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,39 @@ impl ValidateResult {
}

#[derive(Debug)]
enum ErrorReason {
pub enum ErrorReason {
Reason(String),
Detail(InvalidDetail),
Error(Box<dyn std::error::Error + Send + Sync>),
}

impl std::fmt::Display for ErrorReason {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ErrorReason::Detail(detail) => {
write!(f, "{}", detail.reason)?;
for line in detail.packs.iter().take(5) {
write!(f, "\n{}", line)?;
}
if detail.packs.len() > 5 {
write!(f, "\n...")?;
}
}
ErrorReason::Error(e) => {
if let Some(e) = e.downcast_ref::<Error>() {
write!(f, "{}", e.inner)?;
} else {
write!(f, "{}", e)?;
}
}
ErrorReason::Reason(e) => {
write!(f, "{}", e)?;
}
};
Ok(())
}
}

#[derive(Debug)]
pub enum ErrorType {
Validate,
Expand Down Expand Up @@ -124,40 +151,27 @@ impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
if let Some(t) = &self.r#type {
write!(f, "{} ", t)?;
}
if let Some(scope) = self.scope {
write!(f, "scope `{}` ", scope)?;
}
write!(f, "failed due to")?;

match &self.inner {
ErrorReason::Detail(detail) => {
write!(f, " {}", detail.reason)?;
let mut pack_info_lines = detail
.packs
.iter()
.map(|p| format!("- {}", p))
.collect::<Vec<_>>();
if pack_info_lines.len() > 5 {
pack_info_lines.truncate(5);
pack_info_lines.push("...".to_string());
}
if !pack_info_lines.is_empty() {
write!(f, ":\n{}", pack_info_lines.join("\n"))?;
}
}
ErrorReason::Error(e) => {
write!(f, " {}", e)?;
}
ErrorReason::Reason(e) => {
write!(f, " {}", e)?;
if let Some(scope) = self.scope {
write!(f, "scope `{}` ", scope)?;
}
write!(f, "failed due to")?;
write!(f, " {}", self.inner)?;
} else {
write!(f, "{}", self.inner)?;
}

Ok(())
}
}

impl std::error::Error for Error {}
impl std::error::Error for Error {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match &self.inner {
ErrorReason::Error(error) => error.source(),
_ => None,
}
}
}

impl miette::Diagnostic for Error {
fn code<'a>(&'a self) -> Option<Box<dyn std::fmt::Display + 'a>> {
Expand Down
11 changes: 5 additions & 6 deletions crates/rspack_storage/src/fs/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,14 @@ impl std::fmt::Display for BatchFSError {
write!(f, "{}", self.message)?;
if let Some(join_error) = &self.join_error {
write!(f, " due to `{}`", join_error)?;
}
if self.errors.len() == 1 {
write!(f, "{}", self.errors[0])?;
} else {
for error in &self.errors {
write!(f, "\n- {}", error)?;
for error in self.errors.iter().take(5) {
write!(f, "\n{}", error)?;
}
if self.errors.len() > 5 {
write!(f, "\n...")?;
}
}

Ok(())
}
}
Expand Down

1 comment on commit 5d68be6

@github-actions
Copy link
Contributor

@github-actions github-actions bot commented on 5d68be6 Dec 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Benchmark detail: Open

Name Base (2024-12-31 d3ce023) Current Change
10000_big_production-mode_disable-minimize + exec 37.6 s ± 466 ms 37.9 s ± 572 ms +0.55 %
10000_development-mode + exec 1.92 s ± 37 ms 1.82 s ± 33 ms -4.99 %
10000_development-mode_hmr + exec 676 ms ± 5.4 ms 675 ms ± 3.9 ms -0.16 %
10000_production-mode + exec 2.51 s ± 30 ms 2.47 s ± 24 ms -1.37 %
arco-pro_development-mode + exec 1.79 s ± 81 ms 1.75 s ± 45 ms -1.86 %
arco-pro_development-mode_hmr + exec 376 ms ± 1.8 ms 377 ms ± 2.1 ms +0.20 %
arco-pro_production-mode + exec 3.68 s ± 93 ms 3.57 s ± 73 ms -3.13 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.7 s ± 141 ms 3.6 s ± 67 ms -2.57 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.65 s ± 90 ms 3.54 s ± 94 ms -2.96 %
threejs_development-mode_10x + exec 1.51 s ± 26 ms 1.49 s ± 37 ms -1.36 %
threejs_development-mode_10x_hmr + exec 780 ms ± 37 ms 762 ms ± 34 ms -2.32 %
threejs_production-mode_10x + exec 5.38 s ± 170 ms 5.3 s ± 65 ms -1.40 %
10000_big_production-mode_disable-minimize + rss memory 9495 MiB ± 179 MiB 9528 MiB ± 106 MiB +0.35 %
10000_development-mode + rss memory 663 MiB ± 18.7 MiB 690 MiB ± 35.3 MiB +3.99 %
10000_development-mode_hmr + rss memory 1447 MiB ± 510 MiB 1420 MiB ± 284 MiB -1.82 %
10000_production-mode + rss memory 615 MiB ± 25.8 MiB 677 MiB ± 33.1 MiB +10.12 %
arco-pro_development-mode + rss memory 572 MiB ± 28.2 MiB 575 MiB ± 32.7 MiB +0.58 %
arco-pro_development-mode_hmr + rss memory 617 MiB ± 73.9 MiB 652 MiB ± 47 MiB +5.56 %
arco-pro_production-mode + rss memory 751 MiB ± 58.2 MiB 716 MiB ± 62.8 MiB -4.66 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 762 MiB ± 32.1 MiB 774 MiB ± 56.1 MiB +1.60 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 746 MiB ± 62.1 MiB 763 MiB ± 34.8 MiB +2.26 %
threejs_development-mode_10x + rss memory 609 MiB ± 20.9 MiB 634 MiB ± 31.5 MiB +4.04 %
threejs_development-mode_10x_hmr + rss memory 1167 MiB ± 34.9 MiB 1096 MiB ± 150 MiB -6.05 %
threejs_production-mode_10x + rss memory 863 MiB ± 49.7 MiB 892 MiB ± 55.8 MiB +3.34 %

Please sign in to comment.