Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/base-db/src/lib.rs22
1 files changed, 10 insertions, 12 deletions
diff --git a/crates/base-db/src/lib.rs b/crates/base-db/src/lib.rs
index f7f4e024ef..a67fbf75c0 100644
--- a/crates/base-db/src/lib.rs
+++ b/crates/base-db/src/lib.rs
@@ -387,10 +387,8 @@ fn relevant_crates(db: &dyn RootQueryDb, file_id: FileId) -> Arc<[Crate]> {
}
#[must_use]
-pub struct DbPanicContext {
- // prevent arbitrary construction
- _priv: (),
-}
+#[non_exhaustive]
+pub struct DbPanicContext;
impl Drop for DbPanicContext {
fn drop(&mut self) {
@@ -404,18 +402,18 @@ impl DbPanicContext {
fn set_hook() {
let default_hook = panic::take_hook();
panic::set_hook(Box::new(move |panic_info| {
+ default_hook(panic_info);
+ if let Some(backtrace) = salsa::Backtrace::capture() {
+ eprintln!("{backtrace:#}");
+ }
DbPanicContext::with_ctx(|ctx| {
if !ctx.is_empty() {
- eprintln!("Panic context:");
- for frame in ctx.iter() {
- eprintln!("> {frame}\n");
+ eprintln!("additional context:");
+ for (idx, frame) in ctx.iter().enumerate() {
+ eprintln!("{idx:>4}: {frame}\n");
}
}
});
- if let Some(backtrace) = salsa::Backtrace::capture() {
- eprintln!("{backtrace}");
- }
- default_hook(panic_info);
}));
}
@@ -423,7 +421,7 @@ impl DbPanicContext {
SET_HOOK.call_once(set_hook);
Self::with_ctx(|ctx| ctx.push(frame));
- DbPanicContext { _priv: () }
+ DbPanicContext
}
fn with_ctx(f: impl FnOnce(&mut Vec<String>)) {