about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--clippy_lints/src/needless_arbitrary_self_type.rs8
-rw-r--r--tests/ui/needless_arbitrary_self_type.fixed2
-rw-r--r--tests/ui/needless_arbitrary_self_type.rs2
-rw-r--r--tests/ui/needless_arbitrary_self_type.stderr8
4 files changed, 9 insertions, 11 deletions
diff --git a/clippy_lints/src/needless_arbitrary_self_type.rs b/clippy_lints/src/needless_arbitrary_self_type.rs
index 4590128bedc..38bdd0f7ed2 100644
--- a/clippy_lints/src/needless_arbitrary_self_type.rs
+++ b/clippy_lints/src/needless_arbitrary_self_type.rs
@@ -104,8 +104,12 @@ impl EarlyLintPass for NeedlessArbitrarySelfType {
                 }
             },
             TyKind::Rptr(lifetime, mut_ty) => {
-                if let TyKind::Path(None, path) = &mut_ty.ty.kind {
-                    check_param_inner(cx, path, p.span.to(p.ty.span), &Mode::Ref(*lifetime), mut_ty.mutbl)
+                if_chain! {
+                if let TyKind::Path(None, path) = &mut_ty.ty.kind;
+                if let PatKind::Ident(BindingMode::ByValue(Mutability::Not), _, _) = p.pat.kind;
+                    then {
+                        check_param_inner(cx, path, p.span.to(p.ty.span), &Mode::Ref(*lifetime), mut_ty.mutbl)
+                    }
                 }
             },
             _ => {},
diff --git a/tests/ui/needless_arbitrary_self_type.fixed b/tests/ui/needless_arbitrary_self_type.fixed
index bc770d8bf68..9da21eb6b29 100644
--- a/tests/ui/needless_arbitrary_self_type.fixed
+++ b/tests/ui/needless_arbitrary_self_type.fixed
@@ -57,7 +57,7 @@ impl ValType {
         unimplemented!();
     }
 
-    pub fn mut_ref_mut_bad(&mut self) {
+    pub fn mut_ref_mut_good(mut self: &mut Self) {
         unimplemented!();
     }
 
diff --git a/tests/ui/needless_arbitrary_self_type.rs b/tests/ui/needless_arbitrary_self_type.rs
index 9074920b204..17aeaaf97ac 100644
--- a/tests/ui/needless_arbitrary_self_type.rs
+++ b/tests/ui/needless_arbitrary_self_type.rs
@@ -57,7 +57,7 @@ impl ValType {
         unimplemented!();
     }
 
-    pub fn mut_ref_mut_bad(mut self: &mut Self) {
+    pub fn mut_ref_mut_good(mut self: &mut Self) {
         unimplemented!();
     }
 
diff --git a/tests/ui/needless_arbitrary_self_type.stderr b/tests/ui/needless_arbitrary_self_type.stderr
index 227c6d73b62..f4c645d35c8 100644
--- a/tests/ui/needless_arbitrary_self_type.stderr
+++ b/tests/ui/needless_arbitrary_self_type.stderr
@@ -36,11 +36,5 @@ error: the type of the `self` parameter does not need to be arbitrary
 LL |     pub fn mut_ref_bad_with_lifetime<'a>(self: &'a mut Self) {
    |                                          ^^^^^^^^^^^^^^^^^^ help: consider to change this parameter to: `&'a mut self`
 
-error: the type of the `self` parameter does not need to be arbitrary
-  --> $DIR/needless_arbitrary_self_type.rs:60:28
-   |
-LL |     pub fn mut_ref_mut_bad(mut self: &mut Self) {
-   |                            ^^^^^^^^^^^^^^^^^^^ help: consider to change this parameter to: `&mut self`
-
-error: aborting due to 7 previous errors
+error: aborting due to 6 previous errors