Skip to content

Commit

Permalink
Unrolled build for rust-lang#134668
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#134668 - compiler-errors:default-struct-value-fmt, r=ytmimi

Make sure we don't lose default struct value when formatting struct

The reason why rust-lang/rustfmt#6424 broke when rust-lang#129514 landed is because the parser now *successfully* parses default struct values. That means that where we used to fail in `rewrite_macro_inner`:

https://github.com/rust-lang/rust/blob/e108481f74ff123ad98a63bd107a18d13035b275/src/tools/rustfmt/src/macros.rs#L263-L267

... we now succeed, and we now proceed to format the inner struct as a macro arg. Since formatting was never implemented for default struct values, this means that we’ll always rewrite the struct to exclude the default value.

This PR makes it so that we simply don’t rewrite struct fields if they have a default value.

r? `@ytmimi`
  • Loading branch information
rust-timer authored Dec 23, 2024
2 parents 66bb586 + 68c46e1 commit f972d05
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/tools/rustfmt/src/items.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1944,6 +1944,11 @@ pub(crate) fn rewrite_struct_field(
shape: Shape,
lhs_max_width: usize,
) -> RewriteResult {
// FIXME(default_field_values): Implement formatting.
if field.default.is_some() {
return Err(RewriteError::Unknown);
}

if contains_skip(&field.attrs) {
return Ok(context.snippet(field.span()).to_owned());
}
Expand Down
1 change: 1 addition & 0 deletions src/tools/rustfmt/src/spanned.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ impl Spanned for ast::GenericParam {

impl Spanned for ast::FieldDef {
fn span(&self) -> Span {
// FIXME(default_field_values): This needs to be adjusted.
span_with_attrs_lo_hi!(self, self.span.lo(), self.ty.span.hi())
}
}
Expand Down
18 changes: 18 additions & 0 deletions src/tools/rustfmt/tests/source/default-field-values.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#![feature(default_struct_values)]

// Test for now that nightly default field values are left alone for now.

struct Foo {
default_field: Spacing = /* uwu */ 0,
}

struct Foo2 {
#[rustfmt::skip]
default_field: Spacing = /* uwu */ 0,
}

a_macro!(
struct Foo2 {
default_field: Spacing = /* uwu */ 0,
}
);
18 changes: 18 additions & 0 deletions src/tools/rustfmt/tests/target/default-field-values.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#![feature(default_struct_values)]

// Test for now that nightly default field values are left alone for now.

struct Foo {
default_field: Spacing = /* uwu */ 0,
}

struct Foo2 {
#[rustfmt::skip]
default_field: Spacing = /* uwu */ 0,
}

a_macro!(
struct Foo2 {
default_field: Spacing = /* uwu */ 0,
}
);

0 comments on commit f972d05

Please sign in to comment.