Skip to content

Commit d669528

Browse files
committed
Add empty-body check to replace_match_with_if_let and re-prioritize choices
1 parent 09ec0a1 commit d669528

File tree

1 file changed

+45
-3
lines changed

1 file changed

+45
-3
lines changed

crates/ide_assists/src/handlers/replace_if_let_with_match.rs

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,14 @@ fn pick_pattern_and_expr_order(
235235
) -> Option<(ast::Pat, ast::Expr, ast::Expr)> {
236236
let res = match (pat, pat2) {
237237
(ast::Pat::WildcardPat(_), _) => return None,
238-
(pat, sad_pat) if is_sad_pat(sema, &sad_pat) => (pat, expr, expr2),
239-
(sad_pat, pat) if is_sad_pat(sema, &sad_pat) => (pat, expr2, expr),
238+
(pat, _) if expr2.syntax().first_child().is_none() => (pat, expr, expr2),
239+
(_, pat) if expr.syntax().first_child().is_none() => (pat, expr2, expr),
240240
(pat, pat2) => match (binds_name(&pat), binds_name(&pat2)) {
241-
(true, true) => return None,
242241
(true, false) => (pat, expr, expr2),
243242
(false, true) => (pat2, expr2, expr),
243+
_ if is_sad_pat(sema, &pat2) => (pat, expr, expr2),
244+
_ if is_sad_pat(sema, &pat) => (pat2, expr2, expr),
245+
(true, true) => return None,
244246
(false, false) => (pat, expr, expr2),
245247
},
246248
};
@@ -762,6 +764,46 @@ fn foo() {
762764
);
763765
}
764766

767+
#[test]
768+
fn replace_match_with_if_let_prefer_nonempty_body() {
769+
check_assist(
770+
replace_match_with_if_let,
771+
r#"
772+
fn foo() {
773+
match $0Ok(0) {
774+
Ok(value) => {},
775+
Err(err) => eprintln!("{}", err),
776+
}
777+
}
778+
"#,
779+
r#"
780+
fn foo() {
781+
if let Err(err) = Ok(0) {
782+
eprintln!("{}", err)
783+
}
784+
}
785+
"#,
786+
);
787+
check_assist(
788+
replace_match_with_if_let,
789+
r#"
790+
fn foo() {
791+
match $0Ok(0) {
792+
Err(err) => eprintln!("{}", err),
793+
Ok(value) => {},
794+
}
795+
}
796+
"#,
797+
r#"
798+
fn foo() {
799+
if let Err(err) = Ok(0) {
800+
eprintln!("{}", err)
801+
}
802+
}
803+
"#,
804+
);
805+
}
806+
765807
#[test]
766808
fn replace_match_with_if_let_rejects_double_name_bindings() {
767809
check_assist_not_applicable(

0 commit comments

Comments
 (0)