diff --git a/src/items.rs b/src/items.rs index 1de56220cf4..a0e5626b882 100644 --- a/src/items.rs +++ b/src/items.rs @@ -440,6 +440,7 @@ pub fn format_impl(context: &RewriteContext, item: &ast::Item, offset: Indent) - ref self_ty, ref items) = item.node { let mut result = String::new(); + result.push_str(&*format_visibility(&item.vis)); result.push_str(format_unsafety(unsafety)); result.push_str("impl"); @@ -470,7 +471,18 @@ pub fn format_impl(context: &RewriteContext, item: &ast::Item, offset: Indent) - result.push_str(" for "); } - let budget = try_opt!(context.config.max_width.checked_sub(result.len())); + let mut used_space = result.len(); + if generics.where_clause.predicates.is_empty() { + // If there is no where clause adapt budget for type formatting to take space and curly + // brace into account. + match context.config.item_brace_style { + BraceStyle::AlwaysNextLine => {} + BraceStyle::PreferSameLine => used_space += 2, + BraceStyle::SameLineWhere => used_space += 2, + } + } + + let budget = try_opt!(context.config.max_width.checked_sub(used_space)); let indent = offset + result.len(); result.push_str(&*try_opt!(self_ty.rewrite(context, budget, indent))); diff --git a/tests/source/impls.rs b/tests/source/impls.rs index 0eb084018bc..5fbcecb9700 100644 --- a/tests/source/impls.rs +++ b/tests/source/impls.rs @@ -97,3 +97,6 @@ mod m { impl PartialEq for S where T: PartialEq { } } + +impl Handle, HandleType> { +} diff --git a/tests/target/impls.rs b/tests/target/impls.rs index 38c972c0031..03045c21ac5 100644 --- a/tests/target/impls.rs +++ b/tests/target/impls.rs @@ -124,3 +124,7 @@ mod m { impl PartialEq for S where T: PartialEq {} } + +impl Handle, + HandleType> { +}