diff options
| author | Michael Goulet <michael@errs.io> | 2024-12-22 22:09:59 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-12-22 23:55:42 +0000 |
| commit | 68c46e13a25c4f1eb8cdcd33c407cdd0cd53529b (patch) | |
| tree | 19e1a4fc3985a7f8e4f3d14ffb271ddcb89ead46 | |
| parent | b22856d192567a55a1d2788fbc3084e3f9cb220f (diff) | |
| download | rust-68c46e13a25c4f1eb8cdcd33c407cdd0cd53529b.tar.gz rust-68c46e13a25c4f1eb8cdcd33c407cdd0cd53529b.zip | |
Make sure we don't lose default struct value when formatting struct
| -rw-r--r-- | src/tools/rustfmt/src/items.rs | 5 | ||||
| -rw-r--r-- | src/tools/rustfmt/src/spanned.rs | 1 | ||||
| -rw-r--r-- | src/tools/rustfmt/tests/source/default-field-values.rs | 18 | ||||
| -rw-r--r-- | src/tools/rustfmt/tests/target/default-field-values.rs | 18 |
4 files changed, 42 insertions, 0 deletions
diff --git a/src/tools/rustfmt/src/items.rs b/src/tools/rustfmt/src/items.rs index c3debc2f4f0..e7d0fba048b 100644 --- a/src/tools/rustfmt/src/items.rs +++ b/src/tools/rustfmt/src/items.rs @@ -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()); } diff --git a/src/tools/rustfmt/src/spanned.rs b/src/tools/rustfmt/src/spanned.rs index db7c3486e71..6b3e40b9115 100644 --- a/src/tools/rustfmt/src/spanned.rs +++ b/src/tools/rustfmt/src/spanned.rs @@ -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()) } } diff --git a/src/tools/rustfmt/tests/source/default-field-values.rs b/src/tools/rustfmt/tests/source/default-field-values.rs new file mode 100644 index 00000000000..622f9640d0d --- /dev/null +++ b/src/tools/rustfmt/tests/source/default-field-values.rs @@ -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, + } +); diff --git a/src/tools/rustfmt/tests/target/default-field-values.rs b/src/tools/rustfmt/tests/target/default-field-values.rs new file mode 100644 index 00000000000..622f9640d0d --- /dev/null +++ b/src/tools/rustfmt/tests/target/default-field-values.rs @@ -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, + } +); |
