Skip to content

Commit 1e4c2fb

Browse files
authored
Merge pull request rust-lang#2117 from adeschamps/issue-2103
Handle case where there is a where clause but no generic parameters.
2 parents db14ce0 + 18ac341 commit 1e4c2fb

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

src/items.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,7 @@ pub fn format_struct_struct(
10701070
let header_str = format_header(item_name, ident, vis);
10711071
result.push_str(&header_str);
10721072

1073+
let header_hi = span.lo() + BytePos(header_str.len() as u32);
10731074
let body_lo = context.codemap.span_after(span, "{");
10741075

10751076
let generics_str = match generics {
@@ -1081,7 +1082,7 @@ pub fn format_struct_struct(
10811082
context.config.item_brace_style(),
10821083
fields.is_empty(),
10831084
offset,
1084-
mk_sp(span.lo(), body_lo),
1085+
mk_sp(header_hi, body_lo),
10851086
last_line_width(&result),
10861087
)?,
10871088
None => {
@@ -2663,6 +2664,13 @@ fn format_generics(
26632664
let same_line_brace = if !generics.where_clause.predicates.is_empty() || result.contains('\n') {
26642665
let budget = context.budget(last_line_used_width(&result, offset.width()));
26652666
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+
};
26662674
let where_clause_str = rewrite_where_clause(
26672675
context,
26682676
&generics.where_clause,
@@ -2671,7 +2679,7 @@ fn format_generics(
26712679
Density::Tall,
26722680
terminator,
26732681
Some(span.hi()),
2674-
generics.span.hi(),
2682+
span_end_before_where,
26752683
option,
26762684
)?;
26772685
result.push_str(&where_clause_str);

tests/target/issue-2103.rs

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
struct X
2+
where
3+
i32: Sized,
4+
{
5+
x: i32,
6+
}
7+
8+
struct X
9+
// with comment
10+
where
11+
i32: Sized,
12+
{
13+
x: i32,
14+
}

0 commit comments

Comments
 (0)