about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMateusz Gacek <96mateusz.gacek@gmail.com>2021-05-06 10:49:31 -0700
committerMateusz Gacek <96mateusz.gacek@gmail.com>2021-05-06 10:49:31 -0700
commitab3094b3dbf0bf6423a9cf0509a170eee89f106e (patch)
treeef5413ffea785cfd402351f8d87cfc7a49556876
parentf3a0ac1f4b3675e8313dff0f06023b463877dc4d (diff)
downloadrust-ab3094b3dbf0bf6423a9cf0509a170eee89f106e.tar.gz
rust-ab3094b3dbf0bf6423a9cf0509a170eee89f106e.zip
wrong_self_convention: For `to_*` variant don't lint in trait impl taking `self` when non-`Copy` type
It relaxes rules for `to_*` variant, so it doesn't lint in trait definitions
and implementations anymore.
Although, non-`Copy` type implementing trait's `to_*` method taking
`self` feels not good (consumes ownership, so should be rather named `into_`), it would be better if this case was a pedantic lint (allow-by-default) instead.
-rw-r--r--clippy_lints/src/methods/wrong_self_convention.rs2
-rw-r--r--tests/ui/wrong_self_convention2.rs2
-rw-r--r--tests/ui/wrong_self_convention2.stderr11
3 files changed, 2 insertions, 13 deletions
diff --git a/clippy_lints/src/methods/wrong_self_convention.rs b/clippy_lints/src/methods/wrong_self_convention.rs
index 6e2bcb113c2..1773c26c251 100644
--- a/clippy_lints/src/methods/wrong_self_convention.rs
+++ b/clippy_lints/src/methods/wrong_self_convention.rs
@@ -22,7 +22,7 @@ const CONVENTIONS: [(&[Convention], &[SelfKind]); 9] = [
     // Conversion using `to_` can use borrowed (non-Copy types) or owned (Copy types).
     // Source: https://rust-lang.github.io/api-guidelines/naming.html#ad-hoc-conversions-follow-as_-to_-into_-conventions-c-conv
     (&[Convention::StartsWith("to_"), Convention::NotEndsWith("_mut"), Convention::IsSelfTypeCopy(false), 
-    Convention::IsTraitItem(false)], &[SelfKind::Ref]),
+    Convention::IsTraitItem(false), Convention::ImplementsTrait(false)], &[SelfKind::Ref]),
     (&[Convention::StartsWith("to_"), Convention::NotEndsWith("_mut"), Convention::IsSelfTypeCopy(true), 
     Convention::IsTraitItem(false), Convention::ImplementsTrait(false)], &[SelfKind::Value]),
 ];
diff --git a/tests/ui/wrong_self_convention2.rs b/tests/ui/wrong_self_convention2.rs
index ae3a740d405..18202ef2989 100644
--- a/tests/ui/wrong_self_convention2.rs
+++ b/tests/ui/wrong_self_convention2.rs
@@ -23,7 +23,7 @@ mod issue6983 {
     }
 
     struct FooNoCopy;
-    // trigger lint
+    // don't trigger
     impl ToU64 for FooNoCopy {
         fn to_u64(self) -> u64 {
             2
diff --git a/tests/ui/wrong_self_convention2.stderr b/tests/ui/wrong_self_convention2.stderr
deleted file mode 100644
index 0ca1a390974..00000000000
--- a/tests/ui/wrong_self_convention2.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: methods with the following characteristics: (`to_*` and `self` type is not `Copy`) usually take `self` by reference
-  --> $DIR/wrong_self_convention2.rs:28:19
-   |
-LL |         fn to_u64(self) -> u64 {
-   |                   ^^^^
-   |
-   = note: `-D clippy::wrong-self-convention` implied by `-D warnings`
-   = help: consider choosing a less ambiguous name
-
-error: aborting due to previous error
-