From da92f46cc8b5fc7e45cd35117ca4cb0cff80405e Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Sun, 27 Dec 2020 18:00:59 +0800 Subject: Add force_show_panics flag --- crates/proc_macro_srv/src/proc_macro/bridge/client.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'crates/proc_macro_srv/src/proc_macro/bridge/client.rs') diff --git a/crates/proc_macro_srv/src/proc_macro/bridge/client.rs b/crates/proc_macro_srv/src/proc_macro/bridge/client.rs index 55d6330cc..ca6749b9b 100644 --- a/crates/proc_macro_srv/src/proc_macro/bridge/client.rs +++ b/crates/proc_macro_srv/src/proc_macro/bridge/client.rs @@ -303,17 +303,21 @@ impl BridgeState<'_> { impl Bridge<'_> { fn enter(self, f: impl FnOnce() -> R) -> R { + let force_show_panics = self.force_show_panics; + // Hide the default panic output within `proc_macro` expansions. // NB. the server can't do this because it may use a different libstd. static HIDE_PANICS_DURING_EXPANSION: Once = Once::new(); HIDE_PANICS_DURING_EXPANSION.call_once(|| { let prev = panic::take_hook(); panic::set_hook(Box::new(move |info| { - let hide = BridgeState::with(|state| match state { - BridgeState::NotConnected => false, - BridgeState::Connected(_) | BridgeState::InUse => true, + let show = BridgeState::with(|state| match state { + BridgeState::NotConnected => true, + // Something weird is going on, so don't suppress any backtraces + BridgeState::InUse => true, + BridgeState::Connected(bridge) => force_show_panics, }); - if !hide { + if show { prev(info) } })); -- cgit v1.2.3