about summary refs log tree commit diff
path: root/docs/dev/debugging.md
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-08-08 22:30:37 +0000
committerGitHub <noreply@github.com>2021-08-08 22:30:37 +0000
commit5664a2b0b31403024ce5ab927760d630d5ddc9a4 (patch)
treec460fe4d703963cc82b888704532ea2022ec96cb /docs/dev/debugging.md
parent044d99e162bd8c1780b5288e0e5cf13fc0bdac51 (diff)
parent59cdb51ef3865582588f2735dc5479e9c205ddb6 (diff)
Merge #9814
9814: Generate default impl when converting `#[derive(Debug)]` to manual impl r=yoshuawuyts a=yoshuawuyts

This patch makes it so when you convert `#[derive(Debug)]` to a manual impl, a default body is provided that's equivalent to the original output of `#[derive(Debug)]`. This should make it drastically easier to write custom `Debug` impls, especially when all you want to do is quickly omit a single field which is `!Debug`.

This is implemented for enums, record structs, tuple structs, empty structs - and it sets us up to implement variations on this in the future for other traits (like `PartialEq` and `Hash`).

Thanks!

## Codegen diff
This is the difference in codegen for record structs with this patch:
```diff
struct Foo {
    bar: String,
}

impl fmt::Debug for Foo {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        todo!();
+        f.debug_struct("Foo").field("bar", &self.bar).finish()
    }
}
```

Co-authored-by: Irina Shestak <shestak.irina@gmail.com>
Co-authored-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
Co-authored-by: Yoshua Wuyts <yoshuawuyts+github@gmail.com>
Diffstat (limited to 'docs/dev/debugging.md')
0 files changed, 0 insertions, 0 deletions