use config::lists::*;
use syntax::ast::{self, BindingMode, FieldPat, Pat, PatKind, RangeEnd, RangeSyntax};
-use syntax::codemap::{self, BytePos, Span};
use syntax::ptr;
+use syntax::source_map::{self, BytePos, Span};
-use codemap::SpanUtils;
use comment::FindUncommented;
use expr::{can_be_overflowed_expr, rewrite_unary_prefix, wrap_struct_field};
use lists::{
use pairs::{rewrite_pair, PairParts};
use rewrite::{Rewrite, RewriteContext};
use shape::Shape;
+use source_map::SpanUtils;
use spanned::Spanned;
use types::{rewrite_path, PathContext};
use utils::{format_mutability, mk_sp, rewrite_ident};
let prefix = prefix.iter().map(|p| p.rewrite(context, shape));
let slice_pat = slice_pat
.as_ref()
- .map(|p| Some(format!("{}..", p.rewrite(context, shape)?)));
+ .and_then(|p| p.rewrite(context, shape))
+ .map(|rw| Some(format!("{}..", if rw == "_" { "" } else { &rw })));
let suffix = suffix.iter().map(|p| p.rewrite(context, shape));
// Munge them together.
fn rewrite_struct_pat(
path: &ast::Path,
- fields: &[codemap::Spanned<ast::FieldPat>],
+ fields: &[source_map::Spanned<ast::FieldPat>],
ellipsis: bool,
span: Span,
context: &RewriteContext,
lo,
// 2 == "..".len()
lo + BytePos(2),
- codemap::NO_EXPANSION,
+ source_map::NO_EXPANSION,
));
pat_vec.insert(pos, dotdot);
}
-
if pat_vec.is_empty() {
return Some(format!("{}()", path_str.unwrap_or_default()));
}
-
let wildcard_suffix_len = count_wildcard_suffix_len(context, &pat_vec, span, shape);
- let (pat_vec, span) = if context.config.condense_wildcard_suffixes() && wildcard_suffix_len >= 2
- {
- let new_item_count = 1 + pat_vec.len() - wildcard_suffix_len;
- let sp = pat_vec[new_item_count - 1].span();
- let snippet = context.snippet(sp);
- let lo = sp.lo() + BytePos(snippet.find_uncommented("_").unwrap() as u32);
- pat_vec[new_item_count - 1] = TuplePatField::Dotdot(mk_sp(lo, lo + BytePos(1)));
- (
- &pat_vec[..new_item_count],
- mk_sp(span.lo(), lo + BytePos(1)),
- )
- } else {
- (&pat_vec[..], span)
- };
+ let (pat_vec, span, condensed) =
+ if context.config.condense_wildcard_suffixes() && wildcard_suffix_len >= 2 {
+ let new_item_count = 1 + pat_vec.len() - wildcard_suffix_len;
+ let sp = pat_vec[new_item_count - 1].span();
+ let snippet = context.snippet(sp);
+ let lo = sp.lo() + BytePos(snippet.find_uncommented("_").unwrap() as u32);
+ pat_vec[new_item_count - 1] = TuplePatField::Dotdot(mk_sp(lo, lo + BytePos(1)));
+ (
+ &pat_vec[..new_item_count],
+ mk_sp(span.lo(), lo + BytePos(1)),
+ true,
+ )
+ } else {
+ (&pat_vec[..], span, false)
+ };
// add comma if `(x,)`
- let add_comma = path_str.is_none() && pat_vec.len() == 1 && dotdot_pos.is_none();
+ let add_comma = path_str.is_none() && pat_vec.len() == 1 && dotdot_pos.is_none() && !condensed;
let path_str = path_str.unwrap_or_default();
let pat_ref_vec = pat_vec.iter().collect::<Vec<_>>();
shape,
span,
context.config.max_width(),
- if add_comma {
+ if dotdot_pos.is_some() {
+ Some(SeparatorTactic::Never)
+ } else if add_comma {
Some(SeparatorTactic::Always)
} else {
None