Add empty-body check to replace_match_with_if_let and re-prioritize choices

This commit is contained in:
elkowar 2021-08-20 15:20:54 +02:00
parent 09ec0a15fa
commit d6695286ee
No known key found for this signature in database
GPG Key ID: E321AD71B1D1F27F

@ -235,12 +235,14 @@ fn pick_pattern_and_expr_order(
) -> Option<(ast::Pat, ast::Expr, ast::Expr)> {
let res = match (pat, pat2) {
(ast::Pat::WildcardPat(_), _) => return None,
(pat, sad_pat) if is_sad_pat(sema, &sad_pat) => (pat, expr, expr2),
(sad_pat, pat) if is_sad_pat(sema, &sad_pat) => (pat, expr2, expr),
(pat, _) if expr2.syntax().first_child().is_none() => (pat, expr, expr2),
(_, pat) if expr.syntax().first_child().is_none() => (pat, expr2, expr),
(pat, pat2) => match (binds_name(&pat), binds_name(&pat2)) {
(true, true) => return None,
(true, false) => (pat, expr, expr2),
(false, true) => (pat2, expr2, expr),
_ if is_sad_pat(sema, &pat2) => (pat, expr, expr2),
_ if is_sad_pat(sema, &pat) => (pat2, expr2, expr),
(true, true) => return None,
(false, false) => (pat, expr, expr2),
},
};
@ -762,6 +764,46 @@ fn foo() {
);
}
#[test]
fn replace_match_with_if_let_prefer_nonempty_body() {
check_assist(
replace_match_with_if_let,
r#"
fn foo() {
match $0Ok(0) {
Ok(value) => {},
Err(err) => eprintln!("{}", err),
}
}
"#,
r#"
fn foo() {
if let Err(err) = Ok(0) {
eprintln!("{}", err)
}
}
"#,
);
check_assist(
replace_match_with_if_let,
r#"
fn foo() {
match $0Ok(0) {
Err(err) => eprintln!("{}", err),
Ok(value) => {},
}
}
"#,
r#"
fn foo() {
if let Err(err) = Ok(0) {
eprintln!("{}", err)
}
}
"#,
);
}
#[test]
fn replace_match_with_if_let_rejects_double_name_bindings() {
check_assist_not_applicable(