// run-rustfix #![allow(unused)] #![warn(clippy::derive_partial_eq_without_eq)] // Don't warn on structs that aren't PartialEq struct NotPartialEq { foo: u32, bar: String, } // Eq can be derived but is missing #[derive(Debug, PartialEq, Eq)] struct MissingEq { foo: u32, bar: String, } // Eq is derived #[derive(PartialEq, Eq)] struct NotMissingEq { foo: u32, bar: String, } // Eq is manually implemented #[derive(PartialEq)] struct ManualEqImpl { foo: u32, bar: String, } impl Eq for ManualEqImpl {} // Cannot be Eq because f32 isn't Eq #[derive(PartialEq)] struct CannotBeEq { foo: u32, bar: f32, } // Don't warn if PartialEq is manually implemented struct ManualPartialEqImpl { foo: u32, bar: String, } impl PartialEq for ManualPartialEqImpl { fn eq(&self, other: &Self) -> bool { self.foo == other.foo && self.bar == other.bar } } // Generic fields should be properly checked for Eq-ness #[derive(PartialEq)] struct GenericNotEq { foo: T, bar: U, } #[derive(PartialEq, Eq)] struct GenericEq { foo: T, bar: U, } #[derive(PartialEq, Eq)] struct TupleStruct(u32); #[derive(PartialEq, Eq)] struct GenericTupleStruct(T); #[derive(PartialEq)] struct TupleStructNotEq(f32); #[derive(PartialEq, Eq)] enum Enum { Foo(u32), Bar { a: String, b: () }, } #[derive(PartialEq, Eq)] enum GenericEnum { Foo(T), Bar { a: U, b: V }, } #[derive(PartialEq)] enum EnumNotEq { Foo(u32), Bar { a: String, b: f32 }, } // Ensure that rustfix works properly when `PartialEq` has other derives on either side #[derive(Debug, PartialEq, Eq, Clone)] struct RustFixWithOtherDerives; #[derive(PartialEq)] struct Generic(T); #[derive(PartialEq, Eq)] struct GenericPhantom(core::marker::PhantomData); fn main() {}