minor: Avoid eprintln on panic

This commit is contained in:
Dawer 2021-06-01 17:21:00 +05:00
parent 71117e6812
commit 99516bbd67
2 changed files with 15 additions and 13 deletions

View file

@ -357,17 +357,20 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
infer: &infer, infer: &infer,
db, db,
pattern_arena: &pattern_arena, pattern_arena: &pattern_arena,
eprint_panic_context: &|| { panic_context: &|| {
use syntax::AstNode; use syntax::AstNode;
if let Ok(scrutinee_sptr) = source_map.expr_syntax(match_expr) { let match_expr_text = source_map
let root = scrutinee_sptr.file_syntax(db.upcast()); .expr_syntax(match_expr)
if let Some(match_ast) = scrutinee_sptr.value.to_node(&root).syntax().parent() { .ok()
eprintln!( .and_then(|scrutinee_sptr| {
"Match checking is about to panic on this expression:\n{}", let root = scrutinee_sptr.file_syntax(db.upcast());
match_ast.to_string(), scrutinee_sptr.value.to_node(&root).syntax().parent()
); })
} .map(|node| node.to_string());
} format!(
"expression:\n{}",
match_expr_text.as_deref().unwrap_or("<synthesized expr>")
)
}, },
}; };
let report = compute_match_usefulness(&cx, &m_arms); let report = compute_match_usefulness(&cx, &m_arms);

View file

@ -295,7 +295,7 @@ pub(crate) struct MatchCheckCtx<'a> {
pub(crate) db: &'a dyn HirDatabase, pub(crate) db: &'a dyn HirDatabase,
/// Lowered patterns from arms plus generated by the check. /// Lowered patterns from arms plus generated by the check.
pub(crate) pattern_arena: &'a RefCell<PatternArena>, pub(crate) pattern_arena: &'a RefCell<PatternArena>,
pub(crate) eprint_panic_context: &'a dyn Fn(), pub(crate) panic_context: &'a dyn Fn() -> String,
} }
impl<'a> MatchCheckCtx<'a> { impl<'a> MatchCheckCtx<'a> {
@ -331,8 +331,7 @@ impl<'a> MatchCheckCtx<'a> {
#[track_caller] #[track_caller]
pub(super) fn bug(&self, info: &str) -> ! { pub(super) fn bug(&self, info: &str) -> ! {
(self.eprint_panic_context)(); panic!("bug: {}\n{}", info, (self.panic_context)());
panic!("bug: {}", info);
} }
} }