Skip to content

Commit 03af4ec

Browse files
committed
Fix let-expr in lhs for convert_to_guarded_return
Example --- ```rust fn main() { if$0 let Ok(x) = Err(92) && let Ok(y) = Ok(37) && x < 30 && let Some(y) = Some(8) { foo(x, y); } } ``` **Before this PR**: ```rust fn main() { let Ok(x) = Err(92) else { return }; if !(let Ok(y) = Ok(37) && x < 30) { return } let Some(y) = Some(8) else { return }; foo(x, y); } ``` **After this PR**: ```rust fn main() { let Ok(x) = Err(92) else { return }; let Ok(y) = Ok(37) else { return }; if x >= 30 { return } let Some(y) = Some(8) else { return }; foo(x, y); } ```
1 parent 062ac7a commit 03af4ec

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

crates/ide-assists/src/handlers/convert_to_guarded_return.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,9 @@ fn flat_let_chain(mut expr: ast::Expr) -> Vec<ast::Expr> {
259259
&& bin_expr.op_kind() == Some(ast::BinaryOp::LogicOp(ast::LogicOp::And))
260260
&& let (Some(lhs), Some(rhs)) = (bin_expr.lhs(), bin_expr.rhs())
261261
{
262-
if let Some(last) = chains.pop_if(|last| !matches!(last, ast::Expr::LetExpr(_))) {
262+
if !matches!(rhs, ast::Expr::LetExpr(_))
263+
&& let Some(last) = chains.pop_if(|last| !matches!(last, ast::Expr::LetExpr(_)))
264+
{
263265
chains.push(make::expr_bin_op(rhs, ast::BinaryOp::LogicOp(ast::LogicOp::And), last));
264266
} else {
265267
chains.push(rhs);
@@ -493,6 +495,30 @@ fn main() {
493495
let Some(y) = Some(8) else { return };
494496
foo(x, y);
495497
}
498+
"#,
499+
);
500+
501+
check_assist(
502+
convert_to_guarded_return,
503+
r#"
504+
fn main() {
505+
if$0 let Ok(x) = Err(92)
506+
&& let Ok(y) = Ok(37)
507+
&& x < 30
508+
&& let Some(y) = Some(8)
509+
{
510+
foo(x, y);
511+
}
512+
}
513+
"#,
514+
r#"
515+
fn main() {
516+
let Ok(x) = Err(92) else { return };
517+
let Ok(y) = Ok(37) else { return };
518+
if x >= 30 { return }
519+
let Some(y) = Some(8) else { return };
520+
foo(x, y);
521+
}
496522
"#,
497523
);
498524
}

0 commit comments

Comments
 (0)