Put guard on newline if it exceeds max width

This commit is contained in:
topecongiro 2017-06-12 17:25:38 +09:00
parent 9df1509d19
commit 57fc39305d
3 changed files with 30 additions and 19 deletions

View File

@ -1495,28 +1495,22 @@ fn rewrite_guard(context: &RewriteContext,
if let Some(ref guard) = *guard {
// First try to fit the guard string on the same line as the pattern.
// 4 = ` if `, 5 = ` => {`
let overhead = pattern_width + 4 + 5;
if overhead < shape.width {
let cond_shape = shape
.shrink_left(pattern_width + 4)
.unwrap()
.sub_width(5)
.unwrap();
let cond_str = guard.rewrite(context, cond_shape);
if let Some(cond_str) = cond_str {
if let Some(cond_shape) = shape
.shrink_left(pattern_width + 4)
.and_then(|s| s.sub_width(5)) {
if let Some(cond_str) = guard
.rewrite(context, cond_shape)
.and_then(|s| s.rewrite(context, cond_shape)) {
return Some(format!(" if {}", cond_str));
}
}
// Not enough space to put the guard after the pattern, try a newline.
let overhead = shape.indent.block_indent(context.config).width() + 4 + 5;
if overhead < shape.width {
let cond_str = guard.rewrite(context,
Shape::legacy(shape.width - overhead,
// 3 == `if `
shape.indent.block_indent(context.config) +
3));
if let Some(cond_str) = cond_str {
// 3 == `if `
if let Some(cond_shape) = Shape::indented(shape.indent.block_indent(context.config) + 3,
context.config)
.sub_width(3) {
if let Some(cond_str) = guard.rewrite(context, cond_shape) {
return Some(format!("\n{}if {}",
shape
.indent

View File

@ -21,3 +21,20 @@ fn main() {
}
}
}
fn issue1656() {
{
{
match rewrite {
Some(ref body_str)
if (!body_str.contains('\n') && body_str.len() <= arm_shape.width) ||
!context.config.wrap_match_arms() ||
(extend && first_line_width(body_str) <= arm_shape.width) ||
is_block => {
return None;
}
_ => {}
}
}
}
}

View File

@ -306,8 +306,8 @@ fn guards() {
barrrrrrrrrrrr => {}
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
if fooooooooooooooooooooo &&
(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb ||
cccccccccccccccccccccccccccccccccccccccc) => {}
(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb || cccccccccccccccccccccccccccccccccccccccc) => {
}
}
}