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)
};
// 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 {
some_ridiculously_loooooooooooooooooooooong_function(10000 * 30000000000 + 40000 / 1002200000000
- 50000 * sqrt(-1),
- trivial_value)
+ trivial_value);
+ (((((((((aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + a +
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaa)))))))))
}
some_ridiculously_loooooooooooooooooooooong_function(10000 * 30000000000 +
40000 / 1002200000000 - 50000 * sqrt(-1),
- trivial_value)
+ trivial_value);
+ (((((((((aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
+ a + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
+ aaaaa)))))))))
}