@@ -1070,6 +1070,7 @@ pub fn format_struct_struct(
1070
1070
let header_str = format_header ( item_name, ident, vis) ;
1071
1071
result. push_str ( & header_str) ;
1072
1072
1073
+ let header_hi = span. lo ( ) + BytePos ( header_str. len ( ) as u32 ) ;
1073
1074
let body_lo = context. codemap . span_after ( span, "{" ) ;
1074
1075
1075
1076
let generics_str = match generics {
@@ -1081,7 +1082,7 @@ pub fn format_struct_struct(
1081
1082
context. config . item_brace_style ( ) ,
1082
1083
fields. is_empty ( ) ,
1083
1084
offset,
1084
- mk_sp ( span . lo ( ) , body_lo) ,
1085
+ mk_sp ( header_hi , body_lo) ,
1085
1086
last_line_width ( & result) ,
1086
1087
) ?,
1087
1088
None => {
@@ -2663,6 +2664,13 @@ fn format_generics(
2663
2664
let same_line_brace = if !generics. where_clause . predicates . is_empty ( ) || result. contains ( '\n' ) {
2664
2665
let budget = context. budget ( last_line_used_width ( & result, offset. width ( ) ) ) ;
2665
2666
let option = WhereClauseOption :: snuggled ( & result) ;
2667
+ // If the generics are not parameterized then generics.span.hi() == 0,
2668
+ // so we use span.lo(), which is the position after `struct Foo`.
2669
+ let span_end_before_where = if generics. is_parameterized ( ) {
2670
+ generics. span . hi ( )
2671
+ } else {
2672
+ span. lo ( )
2673
+ } ;
2666
2674
let where_clause_str = rewrite_where_clause (
2667
2675
context,
2668
2676
& generics. where_clause ,
@@ -2671,7 +2679,7 @@ fn format_generics(
2671
2679
Density :: Tall ,
2672
2680
terminator,
2673
2681
Some ( span. hi ( ) ) ,
2674
- generics . span . hi ( ) ,
2682
+ span_end_before_where ,
2675
2683
option,
2676
2684
) ?;
2677
2685
result. push_str ( & where_clause_str) ;
0 commit comments