about summary refs log tree commit diff
path: root/src/items.rs
diff options
context:
space:
mode:
authorNick Cameron <nrc@ncameron.org>2017-05-26 08:43:52 +1200
committerGitHub <noreply@github.com>2017-05-26 08:43:52 +1200
commit3d135ebba473afd378fd08d25e9caad8deaea8d3 (patch)
tree820124e6a4f84ed000d498147c283e1b14bb06c8 /src/items.rs
parent662811b3f0a4187f1a27eaa9880581329f256d85 (diff)
parent92270ba191e53fa3d9a5dbdc8cc36b5f8749cbd7 (diff)
Merge pull request #1586 from topecongiro/minor
Fix minor bugs
Diffstat (limited to 'src/items.rs')
-rw-r--r--src/items.rs25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/items.rs b/src/items.rs
index 37ffb4792eb..34d2b6ea530 100644
--- a/src/items.rs
+++ b/src/items.rs
@@ -1564,7 +1564,12 @@ fn rewrite_fn_base(context: &RewriteContext,
 
     // Args.
     let (mut one_line_budget, mut multi_line_budget, mut arg_indent) =
-        try_opt!(compute_budgets_for_args(context, &result, indent, ret_str_len, newline_brace));
+        try_opt!(compute_budgets_for_args(context,
+                                          &result,
+                                          indent,
+                                          ret_str_len,
+                                          newline_brace,
+                                          has_braces));
 
     if context.config.fn_args_layout() == IndentStyle::Block {
         arg_indent = indent.block_indent(context.config);
@@ -1906,7 +1911,8 @@ fn compute_budgets_for_args(context: &RewriteContext,
                             result: &str,
                             indent: Indent,
                             ret_str_len: usize,
-                            newline_brace: bool)
+                            newline_brace: bool,
+                            has_braces: bool)
                             -> Option<((usize, usize, Indent))> {
     debug!("compute_budgets_for_args {} {:?}, {}, {}",
            result.len(),
@@ -1915,10 +1921,17 @@ fn compute_budgets_for_args(context: &RewriteContext,
            newline_brace);
     // Try keeping everything on the same line.
     if !result.contains('\n') {
-        // 3 = `() `, space is before ret_string.
-        let mut used_space = indent.width() + result.len() + ret_str_len + 3;
-        if !newline_brace {
-            used_space += 2;
+        // 2 = `()`, 3 = `() `, space is before ret_string.
+        let overhead = if ret_str_len == 0 { 2 } else { 3 };
+        let mut used_space = indent.width() + result.len() + ret_str_len + overhead;
+        if has_braces {
+            if !newline_brace {
+                // 2 = `{}`
+                used_space += 2;
+            }
+        } else {
+            // 1 = `;`
+            used_space += 1;
         }
         let one_line_budget = context
             .config