]> git.lizzy.rs Git - rust.git/commitdiff
Only combine `match` if its condition expression fits in a single line
authorOtavio Salvador <otavio@ossystems.com.br>
Mon, 8 Oct 2018 23:49:33 +0000 (20:49 -0300)
committerOtavio Salvador <otavio@ossystems.com.br>
Fri, 12 Oct 2018 23:12:45 +0000 (20:12 -0300)
This improves the formatting and reading of code avoiding the
condition expression to be rewrite, if it goes multi line.

Fixes: #3029.
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
src/overflow.rs
tests/source/issue-3029.rs [new file with mode: 0644]
tests/target/issue-3029.rs [new file with mode: 0644]

index a7fc9728666769162579e33d9d5aba5a6d785675..40cfc4be30f393f2dd95a5bd50946cb6da56cfe9 100644 (file)
@@ -18,6 +18,7 @@
 use closures;
 use expr::{
     can_be_overflowed_expr, is_every_expr_simple, is_method_call, is_nested_call, is_simple_expr,
+    rewrite_cond,
 };
 use lists::{definitive_tactic, itemize_list, write_list, ListFormatting, ListItem, Separator};
 use macros::MacroArg;
@@ -403,6 +404,16 @@ fn rewrite_last_item_with_overflow(
                             closures::rewrite_last_closure(self.context, expr, shape)
                         }
                     }
+                    ast::ExprKind::Match(..) => {
+                        let multi_line = rewrite_cond(self.context, expr, shape)
+                            .map_or(false, |cond| cond.contains('\n'));
+
+                        if multi_line {
+                            None
+                        } else {
+                            expr.rewrite(self.context, shape)
+                        }
+                    }
                     _ => expr.rewrite(self.context, shape),
                 }
             }
diff --git a/tests/source/issue-3029.rs b/tests/source/issue-3029.rs
new file mode 100644 (file)
index 0000000..49ce07f
--- /dev/null
@@ -0,0 +1,21 @@
+fn foo() {
+    EvaluateJSReply::NumberValue(
+        match FromJSValConvertible::from_jsval(cx, rval.handle(), ()) {
+            Ok(ConversionResult::Success(v)) => v,
+            _ => unreachable!(),
+        },
+    )
+}
+
+fn bar() {
+    {
+        {
+            EvaluateJSReply::NumberValue(
+                match FromJSValConvertible::from_jsval(cx, rval.handle(), ()) {
+                    Ok(ConversionResult::Success(v)) => v,
+                    _ => unreachable!(),
+                },
+            )
+        }
+    }
+}
diff --git a/tests/target/issue-3029.rs b/tests/target/issue-3029.rs
new file mode 100644 (file)
index 0000000..49ce07f
--- /dev/null
@@ -0,0 +1,21 @@
+fn foo() {
+    EvaluateJSReply::NumberValue(
+        match FromJSValConvertible::from_jsval(cx, rval.handle(), ()) {
+            Ok(ConversionResult::Success(v)) => v,
+            _ => unreachable!(),
+        },
+    )
+}
+
+fn bar() {
+    {
+        {
+            EvaluateJSReply::NumberValue(
+                match FromJSValConvertible::from_jsval(cx, rval.handle(), ()) {
+                    Ok(ConversionResult::Success(v)) => v,
+                    _ => unreachable!(),
+                },
+            )
+        }
+    }
+}