diff options
author | Edwin Cheng <[email protected]> | 2020-12-27 10:00:59 +0000 |
---|---|---|
committer | Edwin Cheng <[email protected]> | 2020-12-27 10:00:59 +0000 |
commit | da92f46cc8b5fc7e45cd35117ca4cb0cff80405e (patch) | |
tree | 3ad0b0efd6ea63ff420a3af8f1700899f55dd952 /crates/proc_macro_srv/src/proc_macro/bridge/client.rs | |
parent | f3125555a8de6fad4529408436800a6b1243a442 (diff) |
Add force_show_panics flag
Diffstat (limited to 'crates/proc_macro_srv/src/proc_macro/bridge/client.rs')
-rw-r--r-- | crates/proc_macro_srv/src/proc_macro/bridge/client.rs | 12 |
1 files changed, 8 insertions, 4 deletions
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<'_> { | |||
303 | 303 | ||
304 | impl Bridge<'_> { | 304 | impl Bridge<'_> { |
305 | fn enter<R>(self, f: impl FnOnce() -> R) -> R { | 305 | fn enter<R>(self, f: impl FnOnce() -> R) -> R { |
306 | let force_show_panics = self.force_show_panics; | ||
307 | |||
306 | // Hide the default panic output within `proc_macro` expansions. | 308 | // Hide the default panic output within `proc_macro` expansions. |
307 | // NB. the server can't do this because it may use a different libstd. | 309 | // NB. the server can't do this because it may use a different libstd. |
308 | static HIDE_PANICS_DURING_EXPANSION: Once = Once::new(); | 310 | static HIDE_PANICS_DURING_EXPANSION: Once = Once::new(); |
309 | HIDE_PANICS_DURING_EXPANSION.call_once(|| { | 311 | HIDE_PANICS_DURING_EXPANSION.call_once(|| { |
310 | let prev = panic::take_hook(); | 312 | let prev = panic::take_hook(); |
311 | panic::set_hook(Box::new(move |info| { | 313 | panic::set_hook(Box::new(move |info| { |
312 | let hide = BridgeState::with(|state| match state { | 314 | let show = BridgeState::with(|state| match state { |
313 | BridgeState::NotConnected => false, | 315 | BridgeState::NotConnected => true, |
314 | BridgeState::Connected(_) | BridgeState::InUse => true, | 316 | // Something weird is going on, so don't suppress any backtraces |
317 | BridgeState::InUse => true, | ||
318 | BridgeState::Connected(bridge) => force_show_panics, | ||
315 | }); | 319 | }); |
316 | if !hide { | 320 | if show { |
317 | prev(info) | 321 | prev(info) |
318 | } | 322 | } |
319 | })); | 323 | })); |