about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorSeiichi Uchida <seuchida@gmail.com>2019-08-06 11:09:45 +0900
committerGitHub <noreply@github.com>2019-08-06 11:09:45 +0900
commitc0cb5eb5358c38c07c0b57217e691bc3ebbb5e85 (patch)
tree114e83a8516b41c5aef4344ca131149e41e427c3 /src
parent127de250417eac37c71f0383472d920e553ff814 (diff)
Fix broken tuple pattern (#3729)
Diffstat (limited to 'src')
-rw-r--r--src/patterns.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/patterns.rs b/src/patterns.rs
index 57051a286a7..b5032eca6d5 100644
--- a/src/patterns.rs
+++ b/src/patterns.rs
@@ -272,6 +272,18 @@ impl<'a> Spanned for TuplePatField<'a> {
     }
 }
 
+impl<'a> TuplePatField<'a> {
+    fn is_dotdot(&self) -> bool {
+        match self {
+            TuplePatField::Pat(pat) => match pat.node {
+                ast::PatKind::Rest => true,
+                _ => false,
+            },
+            TuplePatField::Dotdot(_) => true,
+        }
+    }
+}
+
 pub(crate) fn can_be_overflowed_pat(
     context: &RewriteContext<'_>,
     pat: &TuplePatField<'_>,
@@ -321,7 +333,10 @@ fn rewrite_tuple_pat(
         (&pat_vec[..], span)
     };
 
+    let is_last_pat_dotdot = pat_vec.last().map_or(false, |p| p.is_dotdot());
+    let add_comma = path_str.is_none() && pat_vec.len() == 1 && !is_last_pat_dotdot;
     let path_str = path_str.unwrap_or_default();
+
     overflow::rewrite_with_parens(
         &context,
         &path_str,
@@ -329,7 +344,11 @@ fn rewrite_tuple_pat(
         shape,
         span,
         context.config.max_width(),
-        None,
+        if add_comma {
+            Some(SeparatorTactic::Always)
+        } else {
+            None
+        },
     )
 }