Merge pull request #3100 from topecongiro/issue-3092

Fix poor formatting of empty trait with generic bounds
This commit is contained in:
Nick Cameron 2018-10-15 08:07:59 +12:00 committed by GitHub
commit a6ef302236
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 3 deletions

View file

@ -1937,7 +1937,9 @@ fn shape_from_rhs_tactic(
rhs_tactic: RhsTactics,
) -> Option<Shape> {
match rhs_tactic {
RhsTactics::ForceNextLineWithoutIndent => Some(shape.with_max_width(context.config)),
RhsTactics::ForceNextLineWithoutIndent => shape
.with_max_width(context.config)
.sub_width(shape.indent.width()),
RhsTactics::Default => {
Shape::indented(shape.indent.block_indent(context.config), context.config)
.sub_width(shape.rhs_overhead(context.config))

View file

@ -1121,6 +1121,7 @@ pub fn format_trait(context: &RewriteContext, item: &ast::Item, offset: Indent)
let snippet = context.snippet(item.span);
let open_pos = snippet.find_uncommented("{")? + 1;
let outer_indent_str = offset.block_only().to_string_with_newline(context.config);
if !trait_items.is_empty() || contains_comment(&snippet[open_pos..]) {
let mut visitor = FmtVisitor::from_context(context);
@ -1134,13 +1135,12 @@ pub fn format_trait(context: &RewriteContext, item: &ast::Item, offset: Indent)
visitor.format_missing(item.span.hi() - BytePos(1));
let inner_indent_str = visitor.block_indent.to_string_with_newline(context.config);
let outer_indent_str = offset.block_only().to_string_with_newline(context.config);
result.push_str(&inner_indent_str);
result.push_str(visitor.buffer.to_string().trim());
result.push_str(&outer_indent_str);
} else if result.contains('\n') {
result.push('\n');
result.push_str(&outer_indent_str);
}
result.push('}');

View file

@ -106,3 +106,12 @@ trait Foo<'a> {
impl<'a> Foo<'a> for i32 {
type Bar< 'a > = i32;
}
// #3092
pub mod test {
pub trait ATraitWithALooongName {}
pub trait ATrait
:ATraitWithALooongName + ATraitWithALooongName + ATraitWithALooongName + ATraitWithALooongName
{
}
}

View file

@ -144,3 +144,15 @@ trait Foo<'a> {
impl<'a> Foo<'a> for i32 {
type Bar<'a> = i32;
}
// #3092
pub mod test {
pub trait ATraitWithALooongName {}
pub trait ATrait:
ATraitWithALooongName
+ ATraitWithALooongName
+ ATraitWithALooongName
+ ATraitWithALooongName
{
}
}