@@ -24,6 +24,11 @@ use if_chain::if_chain;
24
24
/// implementation of
25
25
/// [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html).
26
26
///
27
+ /// It detects both the case when a manual
28
+ /// [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html)
29
+ /// implementation is required and also when it can be created with
30
+ /// `#[derive(Default)]
31
+ ///
27
32
/// **Why is this bad?** The user might expect to be able to use
28
33
/// [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) as the
29
34
/// type can be constructed without arguments.
@@ -54,27 +59,24 @@ use if_chain::if_chain;
54
59
/// }
55
60
/// ```
56
61
///
57
- /// You can also have `new()` call `Default::default()`.
58
- declare_clippy_lint ! {
59
- pub NEW_WITHOUT_DEFAULT ,
60
- style,
61
- "`fn new() -> Self` method without `Default` implementation"
62
- }
63
-
64
- /// **What it does:** Checks for types with a `fn new() -> Self` method
65
- /// and no implementation of
66
- /// [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html),
67
- /// where the `Default` can be derived by `#[derive(Default)]`.
62
+ /// Or, if
63
+ /// [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html)
64
+ /// can be derived by `#[derive(Default)]`:
68
65
///
69
- /// **Why is this bad?** The user might expect to be able to use
70
- /// [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) as the
71
- /// type can be constructed without arguments.
66
+ /// ```rust
67
+ /// struct Foo;
72
68
///
73
- /// **Known problems:** Hopefully none.
69
+ /// impl Foo {
70
+ /// fn new() -> Self {
71
+ /// Foo
72
+ /// }
73
+ /// }
74
+ /// ```
74
75
///
75
- /// **Example:**
76
+ /// Instead, use:
76
77
///
77
78
/// ```rust
79
+ /// #[derive(Default)]
78
80
/// struct Foo;
79
81
///
80
82
/// impl Foo {
@@ -84,11 +86,11 @@ declare_clippy_lint! {
84
86
/// }
85
87
/// ```
86
88
///
87
- /// Just prepend `#[derive(Default)]` before the `struct` definition .
89
+ /// You can also have `new()` call `Default::default()` .
88
90
declare_clippy_lint ! {
89
- pub NEW_WITHOUT_DEFAULT_DERIVE ,
91
+ pub NEW_WITHOUT_DEFAULT ,
90
92
style,
91
- "`fn new() -> Self` without `#[derive]`able `Default` implementation"
93
+ "`fn new() -> Self` method without `Default` implementation"
92
94
}
93
95
94
96
#[ derive( Clone , Default ) ]
@@ -98,7 +100,7 @@ pub struct NewWithoutDefault {
98
100
99
101
impl LintPass for NewWithoutDefault {
100
102
fn get_lints ( & self ) -> LintArray {
101
- lint_array ! ( NEW_WITHOUT_DEFAULT , NEW_WITHOUT_DEFAULT_DERIVE )
103
+ lint_array ! ( NEW_WITHOUT_DEFAULT )
102
104
}
103
105
}
104
106
@@ -167,7 +169,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NewWithoutDefault {
167
169
if let Some ( sp) = can_derive_default( self_ty, cx, default_trait_id) {
168
170
span_lint_node_and_then(
169
171
cx,
170
- NEW_WITHOUT_DEFAULT_DERIVE ,
172
+ NEW_WITHOUT_DEFAULT ,
171
173
id,
172
174
impl_item. span,
173
175
& format!(
0 commit comments