Skip to content

Commit

Permalink
Make sure we don't lose default struct value when formatting struct
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors authored and Aandreba committed Dec 24, 2024
1 parent 3088a95 commit cf2c4af
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 cf2c4af

Please sign in to comment.