mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 20:42:04 +00:00
Add empty-body check to replace_match_with_if_let and re-prioritize choices
This commit is contained in:
parent
09ec0a15fa
commit
d6695286ee
1 changed files with 45 additions and 3 deletions
|
@ -235,12 +235,14 @@ fn pick_pattern_and_expr_order(
|
||||||
) -> Option<(ast::Pat, ast::Expr, ast::Expr)> {
|
) -> Option<(ast::Pat, ast::Expr, ast::Expr)> {
|
||||||
let res = match (pat, pat2) {
|
let res = match (pat, pat2) {
|
||||||
(ast::Pat::WildcardPat(_), _) => return None,
|
(ast::Pat::WildcardPat(_), _) => return None,
|
||||||
(pat, sad_pat) if is_sad_pat(sema, &sad_pat) => (pat, expr, expr2),
|
(pat, _) if expr2.syntax().first_child().is_none() => (pat, expr, expr2),
|
||||||
(sad_pat, pat) if is_sad_pat(sema, &sad_pat) => (pat, expr2, expr),
|
(_, pat) if expr.syntax().first_child().is_none() => (pat, expr2, expr),
|
||||||
(pat, pat2) => match (binds_name(&pat), binds_name(&pat2)) {
|
(pat, pat2) => match (binds_name(&pat), binds_name(&pat2)) {
|
||||||
(true, true) => return None,
|
|
||||||
(true, false) => (pat, expr, expr2),
|
(true, false) => (pat, expr, expr2),
|
||||||
(false, true) => (pat2, expr2, expr),
|
(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),
|
(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]
|
#[test]
|
||||||
fn replace_match_with_if_let_rejects_double_name_bindings() {
|
fn replace_match_with_if_let_rejects_double_name_bindings() {
|
||||||
check_assist_not_applicable(
|
check_assist_not_applicable(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue