@@ -24,6 +24,11 @@ use if_chain::if_chain;
2424/// implementation of
2525/// [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html).
2626///
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+ ///
2732/// **Why is this bad?** The user might expect to be able to use
2833/// [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) as the
2934/// type can be constructed without arguments.
@@ -54,27 +59,24 @@ use if_chain::if_chain;
5459/// }
5560/// ```
5661///
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)]`:
6865///
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;
7268///
73- /// **Known problems:** Hopefully none.
69+ /// impl Foo {
70+ /// fn new() -> Self {
71+ /// Foo
72+ /// }
73+ /// }
74+ /// ```
7475///
75- /// **Example:**
76+ /// Instead, use:
7677///
7778/// ```rust
79+ /// #[derive(Default)]
7880/// struct Foo;
7981///
8082/// impl Foo {
@@ -84,11 +86,11 @@ declare_clippy_lint! {
8486/// }
8587/// ```
8688///
87- /// Just prepend `#[derive(Default)]` before the `struct` definition .
89+ /// You can also have `new()` call `Default::default()` .
8890declare_clippy_lint ! {
89- pub NEW_WITHOUT_DEFAULT_DERIVE ,
91+ pub NEW_WITHOUT_DEFAULT ,
9092 style,
91- "`fn new() -> Self` without `#[derive]`able `Default` implementation"
93+ "`fn new() -> Self` method without `Default` implementation"
9294}
9395
9496#[ derive( Clone , Default ) ]
@@ -98,7 +100,7 @@ pub struct NewWithoutDefault {
98100
99101impl LintPass for NewWithoutDefault {
100102 fn get_lints ( & self ) -> LintArray {
101- lint_array ! ( NEW_WITHOUT_DEFAULT , NEW_WITHOUT_DEFAULT_DERIVE )
103+ lint_array ! ( NEW_WITHOUT_DEFAULT )
102104 }
103105}
104106
@@ -167,7 +169,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NewWithoutDefault {
167169 if let Some ( sp) = can_derive_default( self_ty, cx, default_trait_id) {
168170 span_lint_node_and_then(
169171 cx,
170- NEW_WITHOUT_DEFAULT_DERIVE ,
172+ NEW_WITHOUT_DEFAULT ,
171173 id,
172174 impl_item. span,
173175 & format!(
0 commit comments