Fix bugs in width computation

This commit is contained in:
Gaëtan Cassiers 2015-07-03 00:50:55 +02:00
parent 08b9837a1f
commit 163fbf62ee
3 changed files with 13 additions and 5 deletions

View File

@ -287,13 +287,14 @@ fn rewrite_binary_op(context: &RewriteContext,
let operator_str = context.codemap.span_to_snippet(op.span).unwrap();
// 1 = space between lhs expr and operator
let mut result = try_opt!(lhs.rewrite(context, width - 1 - operator_str.len(), offset));
let mut result =
try_opt!(lhs.rewrite(context, context.config.max_width - offset - 1 - operator_str.len(), offset));
result.push(' ');
result.push_str(&operator_str);
let remaining_width = match result.rfind('\n') {
Some(idx) => (context.config.max_width + idx).checked_sub(result.len()).unwrap_or(0),
Some(idx) => (offset + width + idx).checked_sub(result.len()).unwrap_or(0),
None => width.checked_sub(result.len()).unwrap_or(0)
};
@ -302,7 +303,9 @@ fn rewrite_binary_op(context: &RewriteContext,
// operations with high precendence close together.
let rhs_result = try_opt!(rhs.rewrite(context, width, offset));
if rhs_result.len() > remaining_width {
// Second condition is needed in case of line break not caused by a
// shortage of space, but by end-of-line comments, for example.
if rhs_result.len() > remaining_width || rhs_result.contains('\n') {
result.push('\n');
result.push_str(&make_indent(offset));
} else {

View File

@ -10,5 +10,7 @@ fn foo() -> bool {
some_ridiculously_loooooooooooooooooooooong_function(10000 * 30000000000 + 40000 / 1002200000000
- 50000 * sqrt(-1),
trivial_value)
trivial_value);
(((((((((aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + a +
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaa)))))))))
}

View File

@ -10,5 +10,8 @@ fn foo() -> bool {
some_ridiculously_loooooooooooooooooooooong_function(10000 * 30000000000 +
40000 / 1002200000000 - 50000 * sqrt(-1),
trivial_value)
trivial_value);
(((((((((aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
a + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
aaaaa)))))))))
}