Skip to content

Commit 9eee933

Browse files
committed
Format closed ranges
1 parent d3b18d0 commit 9eee933

File tree

4 files changed

+57
-24
lines changed

4 files changed

+57
-24
lines changed

Cargo.lock

Lines changed: 11 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/expr.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -185,25 +185,27 @@ impl Rewrite for ast::Expr {
185185
ast::ExprKind::Repeat(ref expr, ref repeats) => {
186186
rewrite_pair(&**expr, &**repeats, "[", "; ", "]", context, width, offset)
187187
}
188-
// TODO(#890): Handle closed ranges; rust tracking issue
189-
// https://github.com/rust-lang/rust/issues/28237
190-
ast::ExprKind::Range(Some(ref lhs), Some(ref rhs), _range_limits) => {
191-
rewrite_pair(&**lhs, &**rhs, "", "..", "", context, width, offset)
192-
}
193-
ast::ExprKind::Range(None, Some(ref rhs), _range_limits) => {
194-
rewrite_unary_prefix(context, "..", &**rhs, width, offset)
195-
}
196-
ast::ExprKind::Range(Some(ref lhs), None, _range_limits) => {
197-
Some(format!("{}..",
198-
try_opt!(lhs.rewrite(context,
199-
try_opt!(width.checked_sub(2)),
200-
offset))))
201-
}
202-
ast::ExprKind::Range(None, None, _range_limits) => {
203-
if width >= 2 {
204-
Some("..".into())
205-
} else {
206-
None
188+
ast::ExprKind::Range(ref lhs, ref rhs, limits) => {
189+
let delim = match limits {
190+
ast::RangeLimits::HalfOpen => "..",
191+
ast::RangeLimits::Closed => "...",
192+
};
193+
194+
match (lhs.as_ref().map(|x| &**x), rhs.as_ref().map(|x| &**x)) {
195+
(Some(ref lhs), Some(ref rhs)) => {
196+
rewrite_pair(&**lhs, &**rhs, "", delim, "", context, width, offset)
197+
}
198+
(None, Some(ref rhs)) => {
199+
rewrite_unary_prefix(context, delim, &**rhs, width, offset)
200+
}
201+
(Some(ref lhs), None) => {
202+
Some(format!("{}{}",
203+
try_opt!(lhs.rewrite(context,
204+
try_opt!(width.checked_sub(delim.len())),
205+
offset)),
206+
delim))
207+
}
208+
(None, None) => wrap_str(delim.into(), context.config.max_width, width, offset),
207209
}
208210
}
209211
// We do not format these expressions yet, but they should still

tests/source/expr.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,3 +244,15 @@ fn issue767() {
244244
} else if let false = false {
245245
}
246246
}
247+
248+
fn ranges() {
249+
let x = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa .. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
250+
let y = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
251+
let z = ... x ;
252+
let infi_range_2 = ... ;
253+
254+
a ... b
255+
256+
// the expr below won't compile for some reason...
257+
// let a = 0 ... ;
258+
}

tests/target/expr.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,3 +267,16 @@ fn issue767() {
267267
} else if let false = false {
268268
}
269269
}
270+
271+
fn ranges() {
272+
let x = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
273+
let y =
274+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
275+
let z = ...x;
276+
let infi_range_2 = ...;
277+
278+
a...b
279+
280+
// the expr below won't compile for some reason...
281+
// let a = 0 ... ;
282+
}

0 commit comments

Comments
 (0)