@@ -730,7 +730,7 @@ struct ControlFlow<'a> {
730
730
block : & ' a ast:: Block ,
731
731
else_block : Option < & ' a ast:: Expr > ,
732
732
label : Option < ast:: Label > ,
733
- pats : Option < Vec < & ' a ast:: Pat > > ,
733
+ pats : Vec < & ' a ast:: Pat > ,
734
734
keyword : & ' a str ,
735
735
matcher : & ' a str ,
736
736
connector : & ' a str ,
@@ -744,7 +744,7 @@ fn to_control_flow(expr: &ast::Expr, expr_type: ExprType) -> Option<ControlFlow>
744
744
match expr. node {
745
745
ast:: ExprKind :: If ( ref cond, ref if_block, ref else_block) => Some ( ControlFlow :: new_if (
746
746
cond,
747
- None ,
747
+ vec ! [ ] ,
748
748
if_block,
749
749
else_block. as_ref ( ) . map ( |e| & * * e) ,
750
750
expr_type == ExprType :: SubExpression ,
@@ -754,7 +754,7 @@ fn to_control_flow(expr: &ast::Expr, expr_type: ExprType) -> Option<ControlFlow>
754
754
ast:: ExprKind :: IfLet ( ref pat, ref cond, ref if_block, ref else_block) => {
755
755
Some ( ControlFlow :: new_if (
756
756
cond,
757
- Some ( ptr_vec_to_ref_vec ( pat) ) ,
757
+ ptr_vec_to_ref_vec ( pat) ,
758
758
if_block,
759
759
else_block. as_ref ( ) . map ( |e| & * * e) ,
760
760
expr_type == ExprType :: SubExpression ,
@@ -768,30 +768,39 @@ fn to_control_flow(expr: &ast::Expr, expr_type: ExprType) -> Option<ControlFlow>
768
768
ast:: ExprKind :: Loop ( ref block, label) => {
769
769
Some ( ControlFlow :: new_loop ( block, label, expr. span ) )
770
770
}
771
- ast:: ExprKind :: While ( ref cond, ref block, label) => {
772
- Some ( ControlFlow :: new_while ( None , cond, block, label, expr. span ) )
773
- }
771
+ ast:: ExprKind :: While ( ref cond, ref block, label) => Some ( ControlFlow :: new_while (
772
+ vec ! [ ] ,
773
+ cond,
774
+ block,
775
+ label,
776
+ expr. span ,
777
+ ) ) ,
774
778
ast:: ExprKind :: WhileLet ( ref pat, ref cond, ref block, label) => Some (
775
- ControlFlow :: new_while ( Some ( ptr_vec_to_ref_vec ( pat) ) , cond, block, label, expr. span ) ,
779
+ ControlFlow :: new_while ( ptr_vec_to_ref_vec ( pat) , cond, block, label, expr. span ) ,
776
780
) ,
777
781
_ => None ,
778
782
}
779
783
}
780
784
785
+ fn choose_matcher ( pats : & [ & ast:: Pat ] ) -> & ' static str {
786
+ if pats. is_empty ( ) {
787
+ ""
788
+ } else {
789
+ "let"
790
+ }
791
+ }
792
+
781
793
impl < ' a > ControlFlow < ' a > {
782
794
fn new_if (
783
795
cond : & ' a ast:: Expr ,
784
- pats : Option < Vec < & ' a ast:: Pat > > ,
796
+ pats : Vec < & ' a ast:: Pat > ,
785
797
block : & ' a ast:: Block ,
786
798
else_block : Option < & ' a ast:: Expr > ,
787
799
allow_single_line : bool ,
788
800
nested_if : bool ,
789
801
span : Span ,
790
802
) -> ControlFlow < ' a > {
791
- let matcher = match pats {
792
- Some ( ..) => "let" ,
793
- None => "" ,
794
- } ;
803
+ let matcher = choose_matcher ( & pats) ;
795
804
ControlFlow {
796
805
cond : Some ( cond) ,
797
806
block,
@@ -813,7 +822,7 @@ impl<'a> ControlFlow<'a> {
813
822
block,
814
823
else_block : None ,
815
824
label,
816
- pats : None ,
825
+ pats : vec ! [ ] ,
817
826
keyword : "loop" ,
818
827
matcher : "" ,
819
828
connector : "" ,
@@ -824,16 +833,13 @@ impl<'a> ControlFlow<'a> {
824
833
}
825
834
826
835
fn new_while (
827
- pats : Option < Vec < & ' a ast:: Pat > > ,
836
+ pats : Vec < & ' a ast:: Pat > ,
828
837
cond : & ' a ast:: Expr ,
829
838
block : & ' a ast:: Block ,
830
839
label : Option < ast:: Label > ,
831
840
span : Span ,
832
841
) -> ControlFlow < ' a > {
833
- let matcher = match pats {
834
- Some ( ..) => "let" ,
835
- None => "" ,
836
- } ;
842
+ let matcher = choose_matcher ( & pats) ;
837
843
ControlFlow {
838
844
cond : Some ( cond) ,
839
845
block,
@@ -861,7 +867,7 @@ impl<'a> ControlFlow<'a> {
861
867
block,
862
868
else_block : None ,
863
869
label,
864
- pats : Some ( vec ! [ pat] ) ,
870
+ pats : vec ! [ pat] ,
865
871
keyword : "for" ,
866
872
matcher : "" ,
867
873
connector : " in" ,
@@ -926,7 +932,7 @@ impl<'a> ControlFlow<'a> {
926
932
debug ! ( "rewrite_pat_expr {:?} {:?} {:?}" , shape, self . pats, expr) ;
927
933
928
934
let cond_shape = shape. offset_left ( offset) ?;
929
- if let Some ( ref pat ) = self . pats {
935
+ if ! self . pats . is_empty ( ) {
930
936
let matcher = if self . matcher . is_empty ( ) {
931
937
self . matcher . to_owned ( )
932
938
} else {
@@ -935,7 +941,7 @@ impl<'a> ControlFlow<'a> {
935
941
let pat_shape = cond_shape
936
942
. offset_left ( matcher. len ( ) ) ?
937
943
. sub_width ( self . connector . len ( ) ) ?;
938
- let pat_string = rewrite_multiple_patterns ( context, pat , pat_shape) ?;
944
+ let pat_string = rewrite_multiple_patterns ( context, & self . pats , pat_shape) ?;
939
945
let result = format ! ( "{}{}{}" , matcher, pat_string, self . connector) ;
940
946
return rewrite_assign_rhs ( context, result, expr, cond_shape) ;
941
947
}
@@ -1036,15 +1042,17 @@ impl<'a> ControlFlow<'a> {
1036
1042
context
1037
1043
. snippet_provider
1038
1044
. span_after ( mk_sp ( lo, self . span . hi ( ) ) , self . keyword . trim ( ) ) ,
1039
- self . pats . as_ref ( ) . map_or ( cond_span. lo ( ) , |p| {
1045
+ if self . pats . is_empty ( ) {
1046
+ cond_span. lo ( )
1047
+ } else {
1040
1048
if self . matcher . is_empty ( ) {
1041
- p [ 0 ] . span . lo ( )
1049
+ self . pats [ 0 ] . span . lo ( )
1042
1050
} else {
1043
1051
context
1044
1052
. snippet_provider
1045
1053
. span_before ( self . span , self . matcher . trim ( ) )
1046
1054
}
1047
- } ) ,
1055
+ } ,
1048
1056
) ;
1049
1057
1050
1058
let between_kwd_cond_comment = extract_comment ( between_kwd_cond, context, shape) ;
@@ -1131,7 +1139,7 @@ impl<'a> Rewrite for ControlFlow<'a> {
1131
1139
ast:: ExprKind :: IfLet ( ref pat, ref cond, ref if_block, ref next_else_block) => {
1132
1140
ControlFlow :: new_if (
1133
1141
cond,
1134
- Some ( ptr_vec_to_ref_vec ( pat) ) ,
1142
+ ptr_vec_to_ref_vec ( pat) ,
1135
1143
if_block,
1136
1144
next_else_block. as_ref ( ) . map ( |e| & * * e) ,
1137
1145
false ,
@@ -1142,7 +1150,7 @@ impl<'a> Rewrite for ControlFlow<'a> {
1142
1150
ast:: ExprKind :: If ( ref cond, ref if_block, ref next_else_block) => {
1143
1151
ControlFlow :: new_if (
1144
1152
cond,
1145
- None ,
1153
+ vec ! [ ] ,
1146
1154
if_block,
1147
1155
next_else_block. as_ref ( ) . map ( |e| & * * e) ,
1148
1156
false ,
0 commit comments