@@ -93,7 +93,7 @@ pub(crate) fn replace_if_let_with_match(acc: &mut Assists, ctx: &AssistContext)
93
93
available_range,
94
94
move |edit| {
95
95
let match_expr = {
96
- let else_arm = make_else_arm ( ctx , else_block, & cond_bodies ) ;
96
+ let else_arm = make_else_arm ( else_block) ;
97
97
let make_match_arm = |( pat, body) : ( _ , ast:: BlockExpr ) | {
98
98
let body = body. reset_indent ( ) . indent ( IndentLevel ( 1 ) ) ;
99
99
match pat {
@@ -125,30 +125,9 @@ pub(crate) fn replace_if_let_with_match(acc: &mut Assists, ctx: &AssistContext)
125
125
)
126
126
}
127
127
128
- fn make_else_arm (
129
- ctx : & AssistContext ,
130
- else_block : Option < ast:: BlockExpr > ,
131
- conditionals : & [ ( Either < ast:: Pat , ast:: Expr > , ast:: BlockExpr ) ] ,
132
- ) -> ast:: MatchArm {
128
+ fn make_else_arm ( else_block : Option < ast:: BlockExpr > ) -> ast:: MatchArm {
133
129
if let Some ( else_block) = else_block {
134
- let pattern = if let [ ( Either :: Left ( pat) , _) ] = conditionals {
135
- ctx. sema
136
- . type_of_pat ( pat)
137
- . and_then ( |ty| TryEnum :: from_ty ( & ctx. sema , & ty. adjusted ( ) ) )
138
- . zip ( Some ( pat) )
139
- } else {
140
- None
141
- } ;
142
- let pattern = match pattern {
143
- Some ( ( it, pat) ) => {
144
- if does_pat_match_variant ( pat, & it. sad_pattern ( ) ) {
145
- it. happy_pattern_wildcard ( )
146
- } else {
147
- it. sad_pattern ( )
148
- }
149
- }
150
- None => make:: wildcard_pat ( ) . into ( ) ,
151
- } ;
130
+ let pattern = make:: wildcard_pat ( ) . into ( ) ;
152
131
make:: match_arm ( iter:: once ( pattern) , None , unwrap_trivial_block ( else_block) )
153
132
} else {
154
133
make:: match_arm ( iter:: once ( make:: wildcard_pat ( ) . into ( ) ) , None , make:: expr_unit ( ) )
@@ -460,7 +439,7 @@ fn foo(x: Option<i32>) {
460
439
fn foo(x: Option<i32>) {
461
440
match x {
462
441
Some(x) => println!("{}", x),
463
- None => println!("none"),
442
+ _ => println!("none"),
464
443
}
465
444
}
466
445
"# ,
@@ -485,7 +464,7 @@ fn foo(x: Option<i32>) {
485
464
fn foo(x: Option<i32>) {
486
465
match x {
487
466
None => println!("none"),
488
- Some(_) => println!("some"),
467
+ _ => println!("some"),
489
468
}
490
469
}
491
470
"# ,
@@ -510,7 +489,7 @@ fn foo(x: Result<i32, ()>) {
510
489
fn foo(x: Result<i32, ()>) {
511
490
match x {
512
491
Ok(x) => println!("{}", x),
513
- Err(_) => println!("none"),
492
+ _ => println!("none"),
514
493
}
515
494
}
516
495
"# ,
@@ -535,7 +514,7 @@ fn foo(x: Result<i32, ()>) {
535
514
fn foo(x: Result<i32, ()>) {
536
515
match x {
537
516
Err(x) => println!("{}", x),
538
- Ok(_) => println!("ok"),
517
+ _ => println!("ok"),
539
518
}
540
519
}
541
520
"# ,
@@ -574,6 +553,33 @@ fn main() {
574
553
)
575
554
}
576
555
556
+ #[ test]
557
+ fn replace_if_let_with_match_nested_type ( ) {
558
+ check_assist (
559
+ replace_if_let_with_match,
560
+ r#"
561
+ //- minicore: result
562
+ fn foo(x: Result<i32, ()>) {
563
+ let bar: Result<_, ()> = Ok(Some(1));
564
+ $0if let Ok(Some(_)) = bar {
565
+ ()
566
+ } else {
567
+ ()
568
+ }
569
+ }
570
+ "# ,
571
+ r#"
572
+ fn foo(x: Result<i32, ()>) {
573
+ let bar: Result<_, ()> = Ok(Some(1));
574
+ match bar {
575
+ Ok(Some(_)) => (),
576
+ _ => (),
577
+ }
578
+ }
579
+ "# ,
580
+ ) ;
581
+ }
582
+
577
583
#[ test]
578
584
fn test_replace_match_with_if_let_unwraps_simple_expressions ( ) {
579
585
check_assist (
@@ -885,32 +891,6 @@ fn foo() {
885
891
Bar(bar) => println!("bar {}", bar),
886
892
}
887
893
}
888
- "# ,
889
- ) ;
890
- }
891
-
892
- #[ test]
893
- fn nested_type ( ) {
894
- check_assist (
895
- replace_if_let_with_match,
896
- r#"
897
- //- minicore: result
898
- fn foo(x: Result<i32, ()>) {
899
- let bar: Result<_, ()> = Ok(Some(1));
900
- $0if let Ok(Some(_)) = bar {
901
- ()
902
- } else {
903
- ()
904
- }
905
- }
906
- "# ,
907
- r#"
908
- fn foo(x: Result<i32, ()>) {
909
- let bar: Result<_, ()> = Ok(Some(1));
910
- match bar {
911
- Ok(Some(_)) => (),
912
- _ => (),
913
- }
914
894
"# ,
915
895
) ;
916
896
}
0 commit comments