Browse Source

add some padding to multi-line anyhow error

Jonathan Kelley 6 days ago
parent
commit
dd8e1299f9
3 changed files with 19 additions and 7 deletions
  1. 16 4
      packages/cli/src/error.rs
  2. 1 1
      packages/cli/src/main.rs
  3. 2 2
      packages/cli/src/serve/mod.rs

+ 16 - 4
packages/cli/src/error.rs

@@ -1,15 +1,27 @@
 pub(crate) type Result<T, E = Error> = std::result::Result<T, E>;
 pub use anyhow::Error;
+use itertools::Itertools;
 
-pub fn log_stacktrace(err: &anyhow::Error) -> String {
+pub fn log_stacktrace(err: &anyhow::Error, padding: usize) -> String {
     let mut trace = format!("{err}",);
 
     for (idx, cause) in err.chain().enumerate().skip(1) {
         trace.push_str(&format!(
-            "\n- {IDX_STYLE}{idx}{IDX_STYLE:#}: {ERROR_STYLE}{}{ERROR_STYLE:#}",
-            cause,
+            "\n{}{IDX_STYLE}{idx}{IDX_STYLE:#}: {}",
+            " ".repeat(padding),
+            cause
+                .to_string()
+                .lines()
+                .enumerate()
+                .map(|(idx, line)| {
+                    if idx == 0 {
+                        line.to_string()
+                    } else {
+                        format!("{}{}", " ".repeat(padding + 3), line)
+                    }
+                })
+                .join("\n"),
             IDX_STYLE = crate::styles::GLOW_STYLE,
-            ERROR_STYLE = crate::styles::ERROR_STYLE
         ));
     }
 

+ 1 - 1
packages/cli/src/main.rs

@@ -79,7 +79,7 @@ async fn main() {
 
             eprintln!(
                 "{ERROR_STYLE}Failed{ERROR_STYLE:#}: {}",
-                crate::error::log_stacktrace(&err),
+                crate::error::log_stacktrace(&err, 1),
                 ERROR_STYLE = crate::styles::ERROR_STYLE,
             );
 

+ 2 - 2
packages/cli/src/serve/mod.rs

@@ -164,7 +164,7 @@ pub(crate) async fn serve_all(args: ServeArgs, tracer: &mut TraceController) ->
                     BuilderUpdate::BuildFailed { err } => {
                         tracing::error!(
                             "{ERROR_STYLE}Build failed{ERROR_STYLE:#}: {}",
-                            crate::error::log_stacktrace(&err),
+                            crate::error::log_stacktrace(&err, 15),
                             ERROR_STYLE = crate::styles::ERROR_STYLE,
                         );
 
@@ -253,7 +253,7 @@ pub(crate) async fn serve_all(args: ServeArgs, tracer: &mut TraceController) ->
                     if let Err(err) = builder.open_all(&devserver, true).await {
                         tracing::error!(
                             "Failed to open app: {}",
-                            crate::error::log_stacktrace(&err)
+                            crate::error::log_stacktrace(&err, 15)
                         )
                     }
                 }