]> git.lizzy.rs Git - rust.git/commitdiff
Split a long chain with a single child
authortopecongiro <seuchida@gmail.com>
Wed, 3 May 2017 02:22:36 +0000 (11:22 +0900)
committertopecongiro <seuchida@gmail.com>
Wed, 3 May 2017 02:22:36 +0000 (11:22 +0900)
src/chains.rs

index 8e176fce72418432aaa2b763f6e145d371114988..8cb726bd4b4b45f0ee786a97116a90869654cf2d 100644 (file)
@@ -176,9 +176,15 @@ pub fn rewrite_chain(expr: &ast::Expr, context: &RewriteContext, shape: Shape) -
         .fold(0, |a, b| a + first_line_width(b)) + parent_rewrite.len();
     let one_line_len = rewrites.iter().fold(0, |a, r| a + r.len()) + parent_rewrite.len();
 
-    let veto_single_line = if one_line_len > context.config.chain_one_line_max - 1 &&
-                              rewrites.len() > 1 {
-        true
+    let veto_single_line = if one_line_len > context.config.chain_one_line_max - 1 {
+        if rewrites.len() > 1 {
+            true
+        } else if rewrites.len() == 1 {
+            let one_line_len = parent_rewrite.len() + first_line_width(&rewrites[0]);
+            one_line_len > shape.width
+        } else {
+            false
+        }
     } else if context.config.take_source_hints && subexpr_list.len() > 1 {
         // Look at the source code. Unless all chain elements start on the same
         // line, we won't consider putting them on a single line either.