| #![allow(dead_code, clippy::extra_unused_lifetimes)] | |
| #![warn(clippy::multiple_inherent_impl)] | |
| struct MyStruct; | |
| impl MyStruct { | |
| fn first() {} | |
| } | |
| impl MyStruct { | |
| //~^ multiple_inherent_impl | |
| fn second() {} | |
| } | |
| impl<'a> MyStruct { | |
| //~^ multiple_inherent_impl | |
| fn lifetimed() {} | |
| } | |
| mod submod { | |
| struct MyStruct; | |
| impl MyStruct { | |
| fn other() {} | |
| } | |
| impl super::MyStruct { | |
| //~^ multiple_inherent_impl | |
| fn third() {} | |
| } | |
| } | |
| use std::fmt; | |
| impl fmt::Debug for MyStruct { | |
| fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | |
| write!(f, "MyStruct {{ }}") | |
| } | |
| } | |
| // issue #5772 | |
| struct WithArgs<T>(T); | |
| impl WithArgs<u32> { | |
| fn f1() {} | |
| } | |
| impl WithArgs<u64> { | |
| fn f2() {} | |
| } | |
| impl WithArgs<u64> { | |
| //~^ multiple_inherent_impl | |
| fn f3() {} | |
| } | |
| // Ok, the struct is allowed to have multiple impls. | |
| #[allow(clippy::multiple_inherent_impl)] | |
| struct Allowed; | |
| impl Allowed {} | |
| impl Allowed {} | |
| impl Allowed {} | |
| struct AllowedImpl; | |
| #[allow(clippy::multiple_inherent_impl)] | |
| impl AllowedImpl {} | |
| // Ok, the first block is skipped by this lint. | |
| impl AllowedImpl {} | |
| struct OneAllowedImpl; | |
| impl OneAllowedImpl {} | |
| #[allow(clippy::multiple_inherent_impl)] | |
| impl OneAllowedImpl {} | |
| impl OneAllowedImpl {} | |
| //~^ multiple_inherent_impl | |
| #[expect(clippy::multiple_inherent_impl)] | |
| struct ExpectedFulfilled; | |
| impl ExpectedFulfilled {} | |
| impl ExpectedFulfilled {} | |
| struct OneExpected; | |
| impl OneExpected {} | |
| #[expect(clippy::multiple_inherent_impl)] | |
| impl OneExpected {} | |
| impl OneExpected {} | |
| //~^ multiple_inherent_impl | |
| // issue #8714 | |
| struct Lifetime<'s> { | |
| s: &'s str, | |
| } | |
| impl Lifetime<'_> {} | |
| impl Lifetime<'_> {} | |
| //~^ multiple_inherent_impl | |
| impl<'a> Lifetime<'a> {} | |
| impl<'a> Lifetime<'a> {} | |
| //~^ multiple_inherent_impl | |
| impl<'b> Lifetime<'b> {} // false negative? | |
| impl Lifetime<'static> {} | |
| struct Generic<G> { | |
| g: Vec<G>, | |
| } | |
| impl<G> Generic<G> {} | |
| impl<G> Generic<G> {} | |
| //~^ multiple_inherent_impl | |
| use std::fmt::Debug; | |
| #[derive(Debug)] | |
| struct GenericWithBounds<T: Debug>(T); | |
| impl<T: Debug> GenericWithBounds<T> { | |
| fn make_one(_one: T) -> Self { | |
| todo!() | |
| } | |
| } | |
| impl<T: Debug> GenericWithBounds<T> { | |
| //~^ multiple_inherent_impl | |
| fn make_two(_two: T) -> Self { | |
| todo!() | |
| } | |
| } | |
| struct MultipleTraitBounds<T>(T); | |
| impl<T: Debug> MultipleTraitBounds<T> { | |
| fn debug_fn() {} | |
| } | |
| impl<T: Clone> MultipleTraitBounds<T> { | |
| fn clone_fn() {} | |
| } | |
| impl<T: Debug + Clone> MultipleTraitBounds<T> { | |
| fn debug_clone_fn() {} | |
| } | |
| fn main() {} |