]> git.lizzy.rs Git - rust.git/commitdiff
Fix bugs in width computation
authorGaëtan Cassiers <gaetan.cassiers@gmail.com>
Thu, 2 Jul 2015 22:50:55 +0000 (00:50 +0200)
committerGaëtan Cassiers <gaetan.cassiers@gmail.com>
Fri, 3 Jul 2015 00:55:43 +0000 (02:55 +0200)
src/expr.rs
tests/source/expr.rs
tests/target/expr.rs

index 2f97fa7e97a416bd6655202f162b38a088fe356e..6fff8be9fc7e7a56a77bfd6591701b97f61934c3 100644 (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 {
index d7013a312f1b35f6593263c6bcef64243fec886c..373e42d67c5e00cc3101ede1312f9da78f4878e7 100644 (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)))))))))
 }
index c565c94b2ac9764913af60c7be307141541d3e50..25c84511c415030da3b28992d8ee6563b4bd96ec 100644 (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)))))))))
 }