diff options
| author | Seiichi Uchida <seuchida@gmail.com> | 2019-08-06 11:09:45 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-06 11:09:45 +0900 |
| commit | c0cb5eb5358c38c07c0b57217e691bc3ebbb5e85 (patch) | |
| tree | 114e83a8516b41c5aef4344ca131149e41e427c3 /src/patterns.rs | |
| parent | 127de250417eac37c71f0383472d920e553ff814 (diff) | |
Fix broken tuple pattern (#3729)
Diffstat (limited to 'src/patterns.rs')
| -rw-r--r-- | src/patterns.rs | 21 |
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 + }, ) } |
