#![no_main] use std::cmp::Ordering; // lint #[derive(Eq, PartialEq)] struct A(u32); impl Ord for A { fn cmp(&self, other: &Self) -> Ordering { todo!(); } } impl PartialOrd for A { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } // do not lint #[derive(Eq, PartialEq)] struct B(u32); impl Ord for B { fn cmp(&self, other: &Self) -> Ordering { todo!(); } } impl PartialOrd for B { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } // lint, and give `_` a name #[derive(Eq, PartialEq)] struct C(u32); impl Ord for C { fn cmp(&self, other: &Self) -> Ordering { todo!(); } } impl PartialOrd for C { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } // do not lint derived #[derive(Eq, Ord, PartialEq, PartialOrd)] struct D(u32); // do not lint if ord is not manually implemented #[derive(Eq, PartialEq)] struct E(u32); impl PartialOrd for E { fn partial_cmp(&self, other: &Self) -> Option { todo!(); } } // do not lint since ord has more restrictive bounds #[derive(Eq, PartialEq)] struct Uwu(A); impl Ord for Uwu { fn cmp(&self, other: &Self) -> Ordering { todo!(); } } impl PartialOrd for Uwu { fn partial_cmp(&self, other: &Self) -> Option { todo!(); } } // do not lint since `Rhs` is not `Self` #[derive(Eq, PartialEq)] struct F(u32); impl Ord for F { fn cmp(&self, other: &Self) -> Ordering { todo!(); } } impl PartialOrd for F { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } impl PartialEq for F { fn eq(&self, other: &u32) -> bool { todo!(); } } impl PartialOrd for F { fn partial_cmp(&self, other: &u32) -> Option { todo!(); } } // #11178, do not lint #[derive(Eq, PartialEq)] struct G(u32); impl Ord for G { fn cmp(&self, other: &Self) -> Ordering { todo!(); } } impl PartialOrd for G { fn partial_cmp(&self, other: &Self) -> Option { Some(Self::cmp(self, other)) } } #[derive(Eq, PartialEq)] struct H(u32); impl Ord for H { fn cmp(&self, other: &Self) -> Ordering { todo!(); } } impl PartialOrd for H { fn partial_cmp(&self, other: &Self) -> Option { Some(Ord::cmp(self, other)) } } // #12683, do not lint #[derive(Eq, PartialEq)] struct I(u32); impl Ord for I { fn cmp(&self, other: &Self) -> Ordering { todo!(); } } impl PartialOrd for I { #[allow(clippy::needless_return)] fn partial_cmp(&self, other: &Self) -> Option { return Some(self.cmp(other)); } }