@@ -248,14 +248,37 @@ pub fn format_expr(
248
248
}
249
249
}
250
250
251
+ fn needs_space_after_range ( rhs : & ast:: Expr ) -> bool {
252
+ match rhs. node {
253
+ // Don't format `.. ..` into `....`, which is invalid.
254
+ //
255
+ // This check is unnecessary for `lhs`, because a range
256
+ // starting from another range needs parentheses as `(x ..) ..`
257
+ // (`x .. ..` is a range from `x` to `..`).
258
+ ast:: ExprKind :: Range ( None , _, _) => true ,
259
+ _ => false ,
260
+ }
261
+ }
262
+
263
+ let default_sp_delim = |lhs : Option < & ast:: Expr > , rhs : Option < & ast:: Expr > | {
264
+ let space_if = |b : bool | if b { " " } else { "" } ;
265
+
266
+ format ! (
267
+ "{}{}{}" ,
268
+ lhs. map( |lhs| space_if( needs_space_before_range( context, lhs) ) )
269
+ . unwrap_or( "" ) ,
270
+ delim,
271
+ rhs. map( |rhs| space_if( needs_space_after_range( rhs) ) )
272
+ . unwrap_or( "" ) ,
273
+ )
274
+ } ;
275
+
251
276
match ( lhs. as_ref ( ) . map ( |x| & * * x) , rhs. as_ref ( ) . map ( |x| & * * x) ) {
252
277
( Some ( lhs) , Some ( rhs) ) => {
253
278
let sp_delim = if context. config . spaces_around_ranges ( ) {
254
279
format ! ( " {} " , delim)
255
- } else if needs_space_before_range ( context, lhs) {
256
- format ! ( " {}" , delim)
257
280
} else {
258
- delim . to_owned ( )
281
+ default_sp_delim ( Some ( lhs ) , Some ( rhs ) )
259
282
} ;
260
283
rewrite_pair (
261
284
& * lhs,
@@ -270,15 +293,15 @@ pub fn format_expr(
270
293
let sp_delim = if context. config . spaces_around_ranges ( ) {
271
294
format ! ( "{} " , delim)
272
295
} else {
273
- delim . to_owned ( )
296
+ default_sp_delim ( None , Some ( rhs ) )
274
297
} ;
275
298
rewrite_unary_prefix ( context, & sp_delim, & * rhs, shape)
276
299
}
277
300
( Some ( lhs) , None ) => {
278
301
let sp_delim = if context. config . spaces_around_ranges ( ) {
279
302
format ! ( " {}" , delim)
280
303
} else {
281
- delim . to_owned ( )
304
+ default_sp_delim ( Some ( lhs ) , None )
282
305
} ;
283
306
rewrite_unary_suffix ( context, & sp_delim, & * lhs, shape)
284
307
}
0 commit comments