diff options
| author | Michael Goulet <michael@errs.io> | 2024-11-26 12:03:42 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-26 12:03:42 -0500 |
| commit | 3013cd83ccb67d7988440e9fa7d9d7df6980bc83 (patch) | |
| tree | 1eb0410069c19a91c06c93a08efe37ab59c4b9d8 | |
| parent | f010e2dc5746bbf28ab95d4718ace42146c47b51 (diff) | |
| parent | c1707aaf0b8da047db0c1e1d97c7fa6c3545672d (diff) | |
| download | rust-3013cd83ccb67d7988440e9fa7d9d7df6980bc83.tar.gz rust-3013cd83ccb67d7988440e9fa7d9d7df6980bc83.zip | |
Rollup merge of #133282 - tgross35:maybe-uninit-debug, r=Amanieu
Shorten the `MaybeUninit` `Debug` implementation
Currently the `Debug` implementation for `MaybeUninit` winds up being pretty verbose. This struct:
```rust
#[derive(Debug)]
pub struct Foo {
pub a: u32,
pub b: &'static str,
pub c: MaybeUninit<u32>,
pub d: MaybeUninit<String>,
}
```
Prints as:
Foo {
a: 0,
b: "hello",
c: core::mem::maybe_uninit::MaybeUninit<u32>,
d: core::mem::maybe_uninit::MaybeUninit<alloc::string::String>,
}
The goal is just to be a standin for content so the path prefix doesn't add any useful information. Change the implementation to trim `MaybeUninit`'s leading path, meaning the new result is now:
Foo {
a: 0,
b: "hello",
c: MaybeUninit<u32>,
d: MaybeUninit<alloc::string::String>,
}
| -rw-r--r-- | library/core/src/mem/maybe_uninit.rs | 6 | ||||
| -rw-r--r-- | library/core/tests/fmt/mod.rs | 7 |
2 files changed, 12 insertions, 1 deletions
diff --git a/library/core/src/mem/maybe_uninit.rs b/library/core/src/mem/maybe_uninit.rs index 58315cb74f0..27273e4eedf 100644 --- a/library/core/src/mem/maybe_uninit.rs +++ b/library/core/src/mem/maybe_uninit.rs @@ -255,7 +255,11 @@ impl<T: Copy> Clone for MaybeUninit<T> { #[stable(feature = "maybe_uninit_debug", since = "1.41.0")] impl<T> fmt::Debug for MaybeUninit<T> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.pad(type_name::<Self>()) + // NB: there is no `.pad_fmt` so we can't use a simpler `format_args!("MaybeUninit<{..}>"). + // This needs to be adjusted if `MaybeUninit` moves modules. + let full_name = type_name::<Self>(); + let short_name = full_name.split_once("mem::maybe_uninit::").unwrap().1; + f.pad(short_name) } } diff --git a/library/core/tests/fmt/mod.rs b/library/core/tests/fmt/mod.rs index 704d2461399..f7512abae38 100644 --- a/library/core/tests/fmt/mod.rs +++ b/library/core/tests/fmt/mod.rs @@ -43,3 +43,10 @@ fn pad_integral_resets() { assert_eq!(format!("{Bar:<03}"), "1 0051 "); } + +#[test] +fn test_maybe_uninit_short() { + // Ensure that the trimmed `MaybeUninit` Debug implementation doesn't break + let x = core::mem::MaybeUninit::new(0u32); + assert_eq!(format!("{x:?}"), "MaybeUninit<u32>"); +} |
