Skip to content

Commit c6305c5

Browse files
committed
fix: Don't panic on broken syntax trees in adjustment inlay hints
1 parent 0b32b65 commit c6305c5

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)