]> git.lizzy.rs Git - rust.git/commitdiff
Use correct one line budget when rewriting index
authortopecongiro <seuchida@gmail.com>
Mon, 10 Jul 2017 05:23:29 +0000 (14:23 +0900)
committertopecongiro <seuchida@gmail.com>
Mon, 10 Jul 2017 05:23:29 +0000 (14:23 +0900)
src/expr.rs
tests/source/expr.rs
tests/target/expr.rs

index b214a42a3dbf9906ac6d37ba5b3244e1a07a85a8..d9524c46fa52abb04ad4fae0f1d3437762afb2ce 100644 (file)
@@ -2494,13 +2494,18 @@ fn rewrite_index(
         ("[", "]")
     };
 
-    let offset = expr_str.len() + lbr.len();
-    let orig_index_rw = shape
-        .visual_indent(offset)
-        .sub_width(offset + rbr.len())
-        .and_then(|index_shape| index.rewrite(context, index_shape));
+    let offset = last_line_width(&expr_str) + lbr.len();
+    let rhs_overhead = shape.rhs_overhead(context.config);
+    let index_shape = if expr_str.contains('\n') {
+        Shape::legacy(context.config.max_width(), shape.indent)
+            .offset_left(offset)
+            .and_then(|shape| shape.sub_width(rbr.len() + rhs_overhead))
+    } else {
+        shape.visual_indent(offset).sub_width(offset + rbr.len())
+    };
+    let orig_index_rw = index_shape.and_then(|s| index.rewrite(context, s));
 
-    // Return if everything fits in a single line.
+    // Return if index fits in a single line.
     match orig_index_rw {
         Some(ref index_str) if !index_str.contains('\n') => {
             return Some(format!("{}{}{}{}", expr_str, lbr, index_str, rbr));
@@ -2510,7 +2515,6 @@ fn rewrite_index(
 
     // Try putting index on the next line and see if it fits in a single line.
     let indent = shape.indent.block_indent(context.config);
-    let rhs_overhead = shape.rhs_overhead(context.config);
     let index_shape = try_opt!(Shape::indented(indent, context.config).offset_left(lbr.len()));
     let index_shape = try_opt!(index_shape.sub_width(rbr.len() + rhs_overhead));
     let new_index_rw = index.rewrite(context, index_shape);
index 96e00174af88604a429193f20f23142dcde4b2e4..fb0bd905d0aae5c26d931465153ea876ae251044 100644 (file)
@@ -222,6 +222,8 @@ fn casts() {
 fn indices() {
     let x = (aaaaaaaaaaaaaaaaaaaaaaaaaaaa+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb+cccccccccccccccc) [ x + y + z ];
     let y = (aaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + cccccccccccccccc)[ xxxxx + yyyyy + zzzzz ];
+    let z = xxxxxxxxxx.x().y().zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz()[aaaaa];
+    let z = xxxxxxxxxx.x().y().zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz()[aaaaa];
 }
 
 fn repeats() {
index c291eca34e208b11cde248c54b88c5a8ab33c18d..26963540fcca036a69897b455f30a8371a2ad759 100644 (file)
@@ -283,6 +283,15 @@ fn indices() {
         [x + y + z];
     let y = (aaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + cccccccccccccccc)
         [xxxxx + yyyyy + zzzzz];
+    let z = xxxxxxxxxx
+        .x()
+        .y()
+        .zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz()[aaaaa];
+    let z = xxxxxxxxxx
+        .x()
+        .y()
+        .zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz()
+        [aaaaa];
 }
 
 fn repeats() {