@@ -1004,6 +1004,46 @@ impl<'a> ControlFlow<'a> {
1004
1004
}
1005
1005
}
1006
1006
1007
+ /// Rewrite the `else` keyword with surrounding comments.
1008
+ ///
1009
+ /// is_last: true if this is an `else` and `false` if this is an `else if` block.
1010
+ /// context: rewrite context
1011
+ /// span: Span between the end of the last expression and the start of the else block,
1012
+ /// which contains the `else` keyword
1013
+ /// shape: Shape
1014
+ pub ( crate ) fn rewrite_else_kw_with_comments (
1015
+ is_last : bool ,
1016
+ context : & RewriteContext < ' _ > ,
1017
+ span : Span ,
1018
+ shape : Shape ,
1019
+ ) -> String {
1020
+ let else_kw_lo = context. snippet_provider . span_before ( span, "else" ) ;
1021
+ let before_else_kw = mk_sp ( span. lo ( ) , else_kw_lo) ;
1022
+ let before_else_kw_comment = extract_comment ( before_else_kw, context, shape) ;
1023
+
1024
+ let else_kw_hi = context. snippet_provider . span_after ( span, "else" ) ;
1025
+ let after_else_kw = mk_sp ( else_kw_hi, span. hi ( ) ) ;
1026
+ let after_else_kw_comment = extract_comment ( after_else_kw, context, shape) ;
1027
+
1028
+ let newline_sep = & shape. indent . to_string_with_newline ( context. config ) ;
1029
+ let before_sep = match context. config . control_brace_style ( ) {
1030
+ ControlBraceStyle :: AlwaysNextLine | ControlBraceStyle :: ClosingNextLine => {
1031
+ newline_sep. as_ref ( )
1032
+ }
1033
+ ControlBraceStyle :: AlwaysSameLine => " " ,
1034
+ } ;
1035
+ let after_sep = match context. config . control_brace_style ( ) {
1036
+ ControlBraceStyle :: AlwaysNextLine if is_last => newline_sep. as_ref ( ) ,
1037
+ _ => " " ,
1038
+ } ;
1039
+
1040
+ format ! (
1041
+ "{}else{}" ,
1042
+ before_else_kw_comment. as_ref( ) . map_or( before_sep, |s| & * * s) ,
1043
+ after_else_kw_comment. as_ref( ) . map_or( after_sep, |s| & * * s) ,
1044
+ )
1045
+ }
1046
+
1007
1047
impl < ' a > Rewrite for ControlFlow < ' a > {
1008
1048
fn rewrite ( & self , context : & RewriteContext < ' _ > , shape : Shape ) -> Option < String > {
1009
1049
debug ! ( "ControlFlow::rewrite {:?} {:?}" , self , shape) ;
@@ -1070,41 +1110,13 @@ impl<'a> Rewrite for ControlFlow<'a> {
1070
1110
}
1071
1111
} ;
1072
1112
1073
- let between_kwd_else_block = mk_sp (
1074
- self . block . span . hi ( ) ,
1075
- context
1076
- . snippet_provider
1077
- . span_before ( mk_sp ( self . block . span . hi ( ) , else_block. span . lo ( ) ) , "else" ) ,
1078
- ) ;
1079
- let between_kwd_else_block_comment =
1080
- extract_comment ( between_kwd_else_block, context, shape) ;
1081
-
1082
- let after_else = mk_sp (
1083
- context
1084
- . snippet_provider
1085
- . span_after ( mk_sp ( self . block . span . hi ( ) , else_block. span . lo ( ) ) , "else" ) ,
1086
- else_block. span . lo ( ) ,
1113
+ let else_kw = rewrite_else_kw_with_comments (
1114
+ last_in_chain,
1115
+ context,
1116
+ self . block . span . between ( else_block. span ) ,
1117
+ shape,
1087
1118
) ;
1088
- let after_else_comment = extract_comment ( after_else, context, shape) ;
1089
-
1090
- let between_sep = match context. config . control_brace_style ( ) {
1091
- ControlBraceStyle :: AlwaysNextLine | ControlBraceStyle :: ClosingNextLine => {
1092
- & * alt_block_sep
1093
- }
1094
- ControlBraceStyle :: AlwaysSameLine => " " ,
1095
- } ;
1096
- let after_sep = match context. config . control_brace_style ( ) {
1097
- ControlBraceStyle :: AlwaysNextLine if last_in_chain => & * alt_block_sep,
1098
- _ => " " ,
1099
- } ;
1100
-
1101
- result. push_str ( & format ! (
1102
- "{}else{}" ,
1103
- between_kwd_else_block_comment
1104
- . as_ref( )
1105
- . map_or( between_sep, |s| & * * s) ,
1106
- after_else_comment. as_ref( ) . map_or( after_sep, |s| & * * s) ,
1107
- ) ) ;
1119
+ result. push_str ( & else_kw) ;
1108
1120
result. push_str ( & rewrite?) ;
1109
1121
}
1110
1122
0 commit comments