summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/src/docs/derivable_impls.txt
blob: 5cee43956cc360eb5ca0af1d7767fc390d24625c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
### What it does
Detects manual `std::default::Default` implementations that are identical to a derived implementation.

### Why is this bad?
It is less concise.

### Example
```
struct Foo {
    bar: bool
}

impl Default for Foo {
    fn default() -> Self {
        Self {
            bar: false
        }
    }
}
```

Use instead:
```
#[derive(Default)]
struct Foo {
    bar: bool
}
```

### Known problems
Derive macros [sometimes use incorrect bounds](https://github.com/rust-lang/rust/issues/26925)
in generic types and the user defined `impl` may be more generalized or
specialized than what derive will produce. This lint can't detect the manual `impl`
has exactly equal bounds, and therefore this lint is disabled for types with
generic parameters.