@@ -235,12 +235,14 @@ fn pick_pattern_and_expr_order(
235
235
) -> Option < ( ast:: Pat , ast:: Expr , ast:: Expr ) > {
236
236
let res = match ( pat, pat2) {
237
237
( 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) ,
240
240
( pat, pat2) => match ( binds_name ( & pat) , binds_name ( & pat2) ) {
241
- ( true , true ) => return None ,
242
241
( true , false ) => ( pat, expr, expr2) ,
243
242
( 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 ,
244
246
( false , false ) => ( pat, expr, expr2) ,
245
247
} ,
246
248
} ;
@@ -762,6 +764,46 @@ fn foo() {
762
764
) ;
763
765
}
764
766
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
+
765
807
#[ test]
766
808
fn replace_match_with_if_let_rejects_double_name_bindings ( ) {
767
809
check_assist_not_applicable (
0 commit comments