diff --git a/src/formatting/items.rs b/src/formatting/items.rs index b818732d23e..15013ffcb56 100644 --- a/src/formatting/items.rs +++ b/src/formatting/items.rs @@ -1192,11 +1192,12 @@ pub(crate) fn format_trait( } result.push_str(&where_clause_str); } - let pre_block_span = if !generics.where_clause.predicates.is_empty() { - mk_sp(generics.where_clause.span.hi(), item.span.hi()) - } else { - item.span - }; + let pre_block_span = + if !generics.where_clause.predicates.is_empty() || !generics.params.is_empty() { + mk_sp(generics.where_clause.span.hi(), item.span.hi()) + } else { + item.span + }; let pre_block_snippet = context.snippet(pre_block_span); if let Some(lo) = pre_block_snippet.find('/') { // 1 = `{` diff --git a/tests/source/issue-4643.rs b/tests/source/issue-4643.rs new file mode 100644 index 00000000000..ba8c6ac80ea --- /dev/null +++ b/tests/source/issue-4643.rs @@ -0,0 +1,22 @@ +pub trait Something< + A, + // some comment + B, + C +> { + fn a(&self, x: A) -> i32; + fn b(&self, x: B) -> i32; + fn c(&self, x: C) -> i32; +} + +pub trait Something< + A, + // some comment + B, + // Another comment + C +> { + fn a(&self, x: A) -> i32; + fn b(&self, x: B) -> i32; + fn c(&self, x: C) -> i32; +} diff --git a/tests/target/issue-4643.rs b/tests/target/issue-4643.rs new file mode 100644 index 00000000000..751e0944b0f --- /dev/null +++ b/tests/target/issue-4643.rs @@ -0,0 +1,24 @@ +pub trait Something< + A, + // some comment + B, + C, +> +{ + fn a(&self, x: A) -> i32; + fn b(&self, x: B) -> i32; + fn c(&self, x: C) -> i32; +} + +pub trait Something< + A, + // some comment + B, + // Another comment + C, +> +{ + fn a(&self, x: A) -> i32; + fn b(&self, x: B) -> i32; + fn c(&self, x: C) -> i32; +}