| #![warn(clippy::wrong_self_convention)] | |
| #![allow(dead_code)] | |
| fn main() {} | |
| #[derive(Clone, Copy)] | |
| struct Foo; | |
| impl Foo { | |
| fn as_i32(self) {} | |
| fn as_u32(&self) {} | |
| fn into_i32(self) {} | |
| fn is_i32(self) {} | |
| fn is_u32(&self) {} | |
| fn to_i32(self) {} | |
| fn from_i32(self) {} | |
| //~^ wrong_self_convention | |
| pub fn as_i64(self) {} | |
| pub fn into_i64(self) {} | |
| pub fn is_i64(self) {} | |
| pub fn to_i64(self) {} | |
| pub fn from_i64(self) {} | |
| //~^ wrong_self_convention | |
| // check whether the lint can be allowed at the function level | |
| #[allow(clippy::wrong_self_convention)] | |
| pub fn from_cake(self) {} | |
| fn as_x<F: AsRef<Self>>(_: F) {} | |
| fn as_y<F: AsRef<Foo>>(_: F) {} | |
| } | |
| struct Bar; | |
| impl Bar { | |
| fn as_i32(self) {} | |
| //~^ wrong_self_convention | |
| fn as_u32(&self) {} | |
| fn into_i32(&self) {} | |
| //~^ wrong_self_convention | |
| fn into_u32(self) {} | |
| fn is_i32(self) {} | |
| //~^ wrong_self_convention | |
| fn is_u32(&self) {} | |
| fn to_i32(self) {} | |
| //~^ wrong_self_convention | |
| fn to_u32(&self) {} | |
| fn from_i32(self) {} | |
| //~^ wrong_self_convention | |
| pub fn as_i64(self) {} | |
| //~^ wrong_self_convention | |
| pub fn into_i64(&self) {} | |
| //~^ wrong_self_convention | |
| pub fn is_i64(self) {} | |
| //~^ wrong_self_convention | |
| pub fn to_i64(self) {} | |
| //~^ wrong_self_convention | |
| pub fn from_i64(self) {} | |
| //~^ wrong_self_convention | |
| // test for false positives | |
| fn as_(self) {} | |
| fn into_(&self) {} | |
| fn is_(self) {} | |
| fn to_(self) {} | |
| fn from_(self) {} | |
| fn to_mut(&mut self) {} | |
| } | |
| // Allow Box<Self>, Rc<Self>, Arc<Self> for methods that take conventionally take Self by value | |
| #[allow(clippy::boxed_local)] | |
| mod issue4293 { | |
| use std::rc::Rc; | |
| use std::sync::Arc; | |
| struct T; | |
| impl T { | |
| fn into_s1(self: Box<Self>) {} | |
| fn into_s2(self: Rc<Self>) {} | |
| fn into_s3(self: Arc<Self>) {} | |
| fn into_t1(self: Box<T>) {} | |
| fn into_t2(self: Rc<T>) {} | |
| fn into_t3(self: Arc<T>) {} | |
| } | |
| } | |
| // False positive for async (see #4037) | |
| mod issue4037 { | |
| pub struct Foo; | |
| pub struct Bar; | |
| impl Foo { | |
| pub async fn into_bar(self) -> Bar { | |
| Bar | |
| } | |
| } | |
| } | |
| // Lint also in trait definition (see #6307) | |
| mod issue6307 { | |
| trait T: Sized { | |
| fn as_i32(self) {} | |
| //~^ wrong_self_convention | |
| fn as_u32(&self) {} | |
| fn into_i32(self) {} | |
| fn into_i32_ref(&self) {} | |
| //~^ wrong_self_convention | |
| fn into_u32(self) {} | |
| fn is_i32(self) {} | |
| //~^ wrong_self_convention | |
| fn is_u32(&self) {} | |
| fn to_i32(self) {} | |
| fn to_u32(&self) {} | |
| fn from_i32(self) {} | |
| //~^ wrong_self_convention | |
| // check whether the lint can be allowed at the function level | |
| #[allow(clippy::wrong_self_convention)] | |
| fn from_cake(self) {} | |
| // test for false positives | |
| fn as_(self) {} | |
| fn into_(&self) {} | |
| fn is_(self) {} | |
| fn to_(self) {} | |
| fn from_(self) {} | |
| fn to_mut(&mut self) {} | |
| } | |
| trait U { | |
| fn as_i32(self); | |
| //~^ wrong_self_convention | |
| fn as_u32(&self); | |
| fn into_i32(self); | |
| fn into_i32_ref(&self); | |
| //~^ wrong_self_convention | |
| fn into_u32(self); | |
| fn is_i32(self); | |
| //~^ wrong_self_convention | |
| fn is_u32(&self); | |
| fn to_i32(self); | |
| fn to_u32(&self); | |
| fn from_i32(self); | |
| //~^ wrong_self_convention | |
| // check whether the lint can be allowed at the function level | |
| #[allow(clippy::wrong_self_convention)] | |
| fn from_cake(self); | |
| // test for false positives | |
| fn as_(self); | |
| fn into_(&self); | |
| fn is_(self); | |
| fn to_(self); | |
| fn from_(self); | |
| fn to_mut(&mut self); | |
| } | |
| trait C: Copy { | |
| fn as_i32(self); | |
| fn as_u32(&self); | |
| fn into_i32(self); | |
| fn into_i32_ref(&self); | |
| //~^ wrong_self_convention | |
| fn into_u32(self); | |
| fn is_i32(self); | |
| fn is_u32(&self); | |
| fn to_i32(self); | |
| fn to_u32(&self); | |
| fn from_i32(self); | |
| //~^ wrong_self_convention | |
| // check whether the lint can be allowed at the function level | |
| #[allow(clippy::wrong_self_convention)] | |
| fn from_cake(self); | |
| // test for false positives | |
| fn as_(self); | |
| fn into_(&self); | |
| fn is_(self); | |
| fn to_(self); | |
| fn from_(self); | |
| fn to_mut(&mut self); | |
| } | |
| } | |
| mod issue6727 { | |
| #[derive(Clone, Copy)] | |
| struct FooCopy; | |
| impl FooCopy { | |
| fn to_u64(self) -> u64 { | |
| 1 | |
| } | |
| // trigger lint | |
| fn to_u64_v2(&self) -> u64 { | |
| //~^ wrong_self_convention | |
| 1 | |
| } | |
| } | |
| struct FooNoCopy; | |
| impl FooNoCopy { | |
| // trigger lint | |
| fn to_u64(self) -> u64 { | |
| //~^ wrong_self_convention | |
| 2 | |
| } | |
| fn to_u64_v2(&self) -> u64 { | |
| 2 | |
| } | |
| } | |
| } | |
| pub mod issue8142 { | |
| struct S; | |
| impl S { | |
| // Should not lint: "no self at all" is allowed. | |
| fn is_forty_two(x: u32) -> bool { | |
| x == 42 | |
| } | |
| // Should not lint: &self is allowed. | |
| fn is_test_code(&self) -> bool { | |
| true | |
| } | |
| } | |
| } |