Skip to content

Commit e9d0bfc

Browse files
committed
Auto merge of #14092 - Veykril:inlay-hint-panic, r=Veykril
fix: Don't panic on broken syntax trees in adjustment inlay hints These should be unreachable, but apparently with broken enough syntax trees (I assume mismatched parens), we do reach these unreachable calls. Haven't quite figured out when this happens though.
2 parents 0b32b65 + c6305c5 commit e9d0bfc

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

crates/ide/src/inlay_hints/adjustment.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use hir::{Adjust, Adjustment, AutoBorrow, HirDisplay, Mutability, PointerCast, Safety, Semantics};
77
use ide_db::RootDatabase;
88

9+
use stdx::never;
910
use syntax::{
1011
ast::{self, make, AstNode},
1112
ted,
@@ -210,16 +211,21 @@ fn needs_parens_for_adjustment_hints(expr: &ast::Expr, postfix: bool) -> (bool,
210211
ted::replace(expr.syntax(), dummy_expr.syntax());
211212

212213
let parent = dummy_expr.syntax().parent();
213-
let expr = if postfix {
214-
let ast::Expr::TryExpr(e) = &dummy_expr else { unreachable!() };
215-
let Some(ast::Expr::ParenExpr(e)) = e.expr() else { unreachable!() };
214+
let Some(expr) = (|| {
215+
if postfix {
216+
let ast::Expr::TryExpr(e) = &dummy_expr else { return None };
217+
let Some(ast::Expr::ParenExpr(e)) = e.expr() else { return None };
216218

217-
e.expr().unwrap()
218-
} else {
219-
let ast::Expr::RefExpr(e) = &dummy_expr else { unreachable!() };
220-
let Some(ast::Expr::ParenExpr(e)) = e.expr() else { unreachable!() };
219+
e.expr()
220+
} else {
221+
let ast::Expr::RefExpr(e) = &dummy_expr else { return None };
222+
let Some(ast::Expr::ParenExpr(e)) = e.expr() else { return None };
221223

222-
e.expr().unwrap()
224+
e.expr()
225+
}
226+
})() else {
227+
never!("broken syntax tree?\n{:?}\n{:?}", expr, dummy_expr);
228+
return (true, true)
223229
};
224230

225231
// At this point

0 commit comments

Comments
 (0)