about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--clippy_lints/src/operators/identity_op.rs14
-rw-r--r--tests/ui/identity_op.fixed6
-rw-r--r--tests/ui/identity_op.rs6
-rw-r--r--tests/ui/identity_op.stderr24
4 files changed, 40 insertions, 10 deletions
diff --git a/clippy_lints/src/operators/identity_op.rs b/clippy_lints/src/operators/identity_op.rs
index be570c4a716..7e515e83cc9 100644
--- a/clippy_lints/src/operators/identity_op.rs
+++ b/clippy_lints/src/operators/identity_op.rs
@@ -262,12 +262,18 @@ fn is_expr_used_with_type_annotation<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx E
 /// Check if the expression is an associated function without a type instance.
 /// Example:
 /// ```
-/// Default::default()
-/// // Or
 /// trait Def {
-///    fn def() -> Self;
+///     fn def() -> Self;
+/// }
+/// impl Def for usize {
+///     fn def() -> Self {
+///         0
+///     }
+/// }
+/// fn test() {
+///     let _ = 0usize + &Default::default();
+///     let _ = 0usize + &Def::def();
 /// }
-/// Def::def()
 /// ```
 fn is_assoc_fn_without_type_instance<'tcx>(cx: &LateContext<'tcx>, expr: &Expr<'tcx>) -> bool {
     if let ExprKind::Call(func, _) = peel_hir_expr_refs(expr).0.kind
diff --git a/tests/ui/identity_op.fixed b/tests/ui/identity_op.fixed
index 20cb3563326..4e14e1a5e33 100644
--- a/tests/ui/identity_op.fixed
+++ b/tests/ui/identity_op.fixed
@@ -318,6 +318,9 @@ fn issue_14932() {
 
     0usize + &Default::default(); // no error
 
+    <usize as Default>::default();
+    //~^ identity_op
+
     let _ = usize::default();
     //~^ identity_op
 
@@ -346,6 +349,9 @@ fn issue_14932_3() {
 
     0usize + &Def::def(); // no error
 
+    <usize as Def>::def();
+    //~^ identity_op
+
     let _ = usize::def();
     //~^ identity_op
 
diff --git a/tests/ui/identity_op.rs b/tests/ui/identity_op.rs
index 18e300ef8a9..ebbef5723ff 100644
--- a/tests/ui/identity_op.rs
+++ b/tests/ui/identity_op.rs
@@ -318,6 +318,9 @@ fn issue_14932() {
 
     0usize + &Default::default(); // no error
 
+    0usize + &<usize as Default>::default();
+    //~^ identity_op
+
     let _ = 0usize + &usize::default();
     //~^ identity_op
 
@@ -346,6 +349,9 @@ fn issue_14932_3() {
 
     0usize + &Def::def(); // no error
 
+    0usize + &<usize as Def>::def();
+    //~^ identity_op
+
     let _ = 0usize + &usize::def();
     //~^ identity_op
 
diff --git a/tests/ui/identity_op.stderr b/tests/ui/identity_op.stderr
index 1fa3dd10478..24fa5db08ce 100644
--- a/tests/ui/identity_op.stderr
+++ b/tests/ui/identity_op.stderr
@@ -380,34 +380,46 @@ LL |     let _: u64 = 1u64 + ((x as i32 + y as i32) as u64 + 0u64);
    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `((x as i32 + y as i32) as u64)`
 
 error: this operation has no effect
-  --> tests/ui/identity_op.rs:321:13
+  --> tests/ui/identity_op.rs:321:5
+   |
+LL |     0usize + &<usize as Default>::default();
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `<usize as Default>::default()`
+
+error: this operation has no effect
+  --> tests/ui/identity_op.rs:324:13
    |
 LL |     let _ = 0usize + &usize::default();
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `usize::default()`
 
 error: this operation has no effect
-  --> tests/ui/identity_op.rs:324:21
+  --> tests/ui/identity_op.rs:327:21
    |
 LL |     let _n: usize = 0usize + &Default::default();
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `Default::default()`
 
 error: this operation has no effect
-  --> tests/ui/identity_op.rs:330:5
+  --> tests/ui/identity_op.rs:333:5
    |
 LL |     0usize + &Default::default()
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `Default::default()`
 
 error: this operation has no effect
-  --> tests/ui/identity_op.rs:349:13
+  --> tests/ui/identity_op.rs:352:5
+   |
+LL |     0usize + &<usize as Def>::def();
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `<usize as Def>::def()`
+
+error: this operation has no effect
+  --> tests/ui/identity_op.rs:355:13
    |
 LL |     let _ = 0usize + &usize::def();
    |             ^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `usize::def()`
 
 error: this operation has no effect
-  --> tests/ui/identity_op.rs:352:21
+  --> tests/ui/identity_op.rs:358:21
    |
 LL |     let _n: usize = 0usize + &Def::def();
    |                     ^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `Def::def()`
 
-error: aborting due to 68 previous errors
+error: aborting due to 70 previous errors