Skip to content

Commit 93da4d8

Browse files
authored
Merge pull request #2624 from sinkuu/dots
Add spaces between consecutive `..` `..=`
2 parents cef31b2 + 61d29eb commit 93da4d8

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

src/expr.rs

+28-5
Original file line numberDiff line numberDiff line change
@@ -248,14 +248,37 @@ pub fn format_expr(
248248
}
249249
}
250250

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+
251276
match (lhs.as_ref().map(|x| &**x), rhs.as_ref().map(|x| &**x)) {
252277
(Some(lhs), Some(rhs)) => {
253278
let sp_delim = if context.config.spaces_around_ranges() {
254279
format!(" {} ", delim)
255-
} else if needs_space_before_range(context, lhs) {
256-
format!(" {}", delim)
257280
} else {
258-
delim.to_owned()
281+
default_sp_delim(Some(lhs), Some(rhs))
259282
};
260283
rewrite_pair(
261284
&*lhs,
@@ -270,15 +293,15 @@ pub fn format_expr(
270293
let sp_delim = if context.config.spaces_around_ranges() {
271294
format!("{} ", delim)
272295
} else {
273-
delim.to_owned()
296+
default_sp_delim(None, Some(rhs))
274297
};
275298
rewrite_unary_prefix(context, &sp_delim, &*rhs, shape)
276299
}
277300
(Some(lhs), None) => {
278301
let sp_delim = if context.config.spaces_around_ranges() {
279302
format!(" {}", delim)
280303
} else {
281-
delim.to_owned()
304+
default_sp_delim(Some(lhs), None)
282305
};
283306
rewrite_unary_suffix(context, &sp_delim, &*lhs, shape)
284307
}

tests/source/expr.rs

+6
Original file line numberDiff line numberDiff line change
@@ -384,3 +384,9 @@ fn bar(&self) {
384384
}
385385
}
386386
}
387+
388+
fn dots() {
389+
.. .. ..; // (.. (.. (..)))
390+
..= ..= ..;
391+
(..) .. ..; // ((..) .. (..))
392+
}

tests/target/expr.rs

+6
Original file line numberDiff line numberDiff line change
@@ -409,3 +409,9 @@ impl Foo {
409409
}
410410
}
411411
}
412+
413+
fn dots() {
414+
.. .. ..; // (.. (.. (..)))
415+
..= ..= ..;
416+
(..).. ..; // ((..) .. (..))
417+
}

0 commit comments

Comments
 (0)