Unnamed repository; edit this file 'description' to name the repository.
Apply make_else_arm to general case
k-nasa 2021-10-09
parent 388525f · commit aeee703
-rw-r--r--crates/ide_assists/src/handlers/replace_if_let_with_match.rs88
1 files changed, 34 insertions, 54 deletions
diff --git a/crates/ide_assists/src/handlers/replace_if_let_with_match.rs b/crates/ide_assists/src/handlers/replace_if_let_with_match.rs
index 6f383ae8bb..5b766ecbea 100644
--- a/crates/ide_assists/src/handlers/replace_if_let_with_match.rs
+++ b/crates/ide_assists/src/handlers/replace_if_let_with_match.rs
@@ -93,7 +93,7 @@ pub(crate) fn replace_if_let_with_match(acc: &mut Assists, ctx: &AssistContext)
available_range,
move |edit| {
let match_expr = {
- let else_arm = make_else_arm(ctx, else_block, &cond_bodies);
+ let else_arm = make_else_arm(else_block);
let make_match_arm = |(pat, body): (_, ast::BlockExpr)| {
let body = body.reset_indent().indent(IndentLevel(1));
match pat {
@@ -125,30 +125,9 @@ pub(crate) fn replace_if_let_with_match(acc: &mut Assists, ctx: &AssistContext)
)
}
-fn make_else_arm(
- ctx: &AssistContext,
- else_block: Option<ast::BlockExpr>,
- conditionals: &[(Either<ast::Pat, ast::Expr>, ast::BlockExpr)],
-) -> ast::MatchArm {
+fn make_else_arm(else_block: Option<ast::BlockExpr>) -> ast::MatchArm {
if let Some(else_block) = else_block {
- let pattern = if let [(Either::Left(pat), _)] = conditionals {
- ctx.sema
- .type_of_pat(pat)
- .and_then(|ty| TryEnum::from_ty(&ctx.sema, &ty.adjusted()))
- .zip(Some(pat))
- } else {
- None
- };
- let pattern = match pattern {
- Some((it, pat)) => {
- if does_pat_match_variant(pat, &it.sad_pattern()) {
- it.happy_pattern_wildcard()
- } else {
- it.sad_pattern()
- }
- }
- None => make::wildcard_pat().into(),
- };
+ let pattern = make::wildcard_pat().into();
make::match_arm(iter::once(pattern), None, unwrap_trivial_block(else_block))
} else {
make::match_arm(iter::once(make::wildcard_pat().into()), None, make::expr_unit())
@@ -460,7 +439,7 @@ fn foo(x: Option<i32>) {
fn foo(x: Option<i32>) {
match x {
Some(x) => println!("{}", x),
- None => println!("none"),
+ _ => println!("none"),
}
}
"#,
@@ -485,7 +464,7 @@ fn foo(x: Option<i32>) {
fn foo(x: Option<i32>) {
match x {
None => println!("none"),
- Some(_) => println!("some"),
+ _ => println!("some"),
}
}
"#,
@@ -510,7 +489,7 @@ fn foo(x: Result<i32, ()>) {
fn foo(x: Result<i32, ()>) {
match x {
Ok(x) => println!("{}", x),
- Err(_) => println!("none"),
+ _ => println!("none"),
}
}
"#,
@@ -535,7 +514,7 @@ fn foo(x: Result<i32, ()>) {
fn foo(x: Result<i32, ()>) {
match x {
Err(x) => println!("{}", x),
- Ok(_) => println!("ok"),
+ _ => println!("ok"),
}
}
"#,
@@ -575,6 +554,33 @@ fn main() {
}
#[test]
+ fn replace_if_let_with_match_nested_type() {
+ check_assist(
+ replace_if_let_with_match,
+ r#"
+//- minicore: result
+fn foo(x: Result<i32, ()>) {
+ let bar: Result<_, ()> = Ok(Some(1));
+ $0if let Ok(Some(_)) = bar {
+ ()
+ } else {
+ ()
+ }
+}
+"#,
+ r#"
+fn foo(x: Result<i32, ()>) {
+ let bar: Result<_, ()> = Ok(Some(1));
+ match bar {
+ Ok(Some(_)) => (),
+ _ => (),
+ }
+}
+"#,
+ );
+ }
+
+ #[test]
fn test_replace_match_with_if_let_unwraps_simple_expressions() {
check_assist(
replace_match_with_if_let,
@@ -888,30 +894,4 @@ fn foo() {
"#,
);
}
-
- #[test]
- fn nested_type() {
- check_assist(
- replace_if_let_with_match,
- r#"
-//- minicore: result
-fn foo(x: Result<i32, ()>) {
- let bar: Result<_, ()> = Ok(Some(1));
- $0if let Ok(Some(_)) = bar {
- ()
- } else {
- ()
- }
-}
-"#,
- r#"
-fn foo(x: Result<i32, ()>) {
- let bar: Result<_, ()> = Ok(Some(1));
- match bar {
- Ok(Some(_)) => (),
- _ => (),
- }
-"#,
- );
- }
}