diff --git a/src/items.rs b/src/items.rs index 7c73d1a6787d..fd0dd9d6a67c 100644 --- a/src/items.rs +++ b/src/items.rs @@ -21,6 +21,7 @@ use comment::{FindUncommented, contains_comment}; use visitor::FmtVisitor; use rewrite::{Rewrite, RewriteContext}; use config::{Config, BlockIndentStyle, Density, ReturnIndent, BraceStyle, FnArgLayoutStyle}; +use itertools::Itertools; use syntax::{ast, abi, ptr, codemap}; use syntax::codemap::{Span, BytePos, mk_sp}; @@ -1056,7 +1057,6 @@ pub fn rewrite_associated_type(ident: ast::Ident, let bounds: &[_] = &ty_param_bounds; let bound_str = bounds.iter() .filter_map(|ty_bound| ty_bound.rewrite(context, context.config.max_width, indent)) - .collect::>() .join(" + "); if bounds.len() > 0 { format!(": {}", bound_str) @@ -1702,7 +1702,6 @@ fn rewrite_trait_bounds(context: &RewriteContext, let bound_str = bounds.iter() .filter_map(|ty_bound| ty_bound.rewrite(&context, width, indent)) - .collect::>() .join(" + "); let mut result = String::new(); diff --git a/src/types.rs b/src/types.rs index b1b9b749dd8e..0c35c82791f5 100644 --- a/src/types.rs +++ b/src/types.rs @@ -23,6 +23,7 @@ use rewrite::{Rewrite, RewriteContext}; use utils::{extra_offset, format_mutability, wrap_str}; use expr::{rewrite_unary_prefix, rewrite_pair, rewrite_tuple}; use config::TypeDensity; +use itertools::Itertools; // Does not wrap on simple segments. pub fn rewrite_path(context: &RewriteContext, @@ -331,8 +332,9 @@ impl Rewrite for ast::WherePredicate { width, offset) }) - .collect::>>()) - .join(", "); + .intersperse(Some(", ".to_string())) + .collect::>()); + // 8 = "for<> : ".len() let used_width = lifetime_str.len() + type_str.len() + 8; let budget = try_opt!(width.checked_sub(used_width)); @@ -342,8 +344,8 @@ impl Rewrite for ast::WherePredicate { budget, offset + used_width) }) - .collect::>>()) - .join(" + "); + .intersperse(Some(" + ".to_string())) + .collect::>()); format!("for<{}> {}: {}", lifetime_str, type_str, bounds_str) } else { @@ -356,8 +358,8 @@ impl Rewrite for ast::WherePredicate { budget, offset + used_width) }) - .collect::>>()) - .join(" + "); + .intersperse(Some(" + ".to_string())) + .collect::>()); format!("{}: {}", type_str, bounds_str) } @@ -450,10 +452,10 @@ impl Rewrite for ast::TyParam { result.push_str(": "); let bounds = try_opt!(self.bounds - .iter() - .map(|ty_bound| ty_bound.rewrite(context, width, offset)) - .collect::>>()) - .join(" + "); + .iter() + .map(|ty_bound| ty_bound.rewrite(context, width, offset)) + .intersperse(Some(" + ".to_string())) + .collect::>()); result.push_str(&bounds); } @@ -477,10 +479,11 @@ impl Rewrite for ast::PolyTraitRef { fn rewrite(&self, context: &RewriteContext, width: usize, offset: Indent) -> Option { if !self.bound_lifetimes.is_empty() { let lifetime_str = try_opt!(self.bound_lifetimes - .iter() - .map(|lt| lt.rewrite(context, width, offset)) - .collect::>>()) - .join(", "); + .iter() + .map(|lt| lt.rewrite(context, width, offset)) + .intersperse(Some(", ".to_string())) + .collect::>()); + // 6 is "for<> ".len() let extra_offset = lifetime_str.len() + 6; let max_path_width = try_opt!(width.checked_sub(extra_offset)); @@ -604,10 +607,10 @@ fn rewrite_bare_fn(bare_fn: &ast::BareFnTy, // This doesn't work out so nicely for mutliline situation with lots of // rightward drift. If that is a problem, we could use the list stuff. result.push_str(&try_opt!(bare_fn.lifetimes - .iter() - .map(|l| l.rewrite(context, try_opt!(width.checked_sub(6)), offset + 4)) - .collect::>>()) - .join(", ")); + .iter() + .map(|l| l.rewrite(context, try_opt!(width.checked_sub(6)), offset + 4)) + .intersperse(Some(", ".to_string())) + .collect::>())); result.push_str("> "); }