// Look for the PartialEq implementations for `ty`
cx.tcx.for_each_relevant_impl(peq_trait_def_id, ty, |impl_id| {
let peq_is_automatically_derived = is_automatically_derived(&cx.tcx.get_attrs(impl_id));
-
+
if peq_is_automatically_derived == hash_is_automatically_derived {
return;
}
-
+
let trait_ref = cx.tcx.impl_trait_ref(impl_id).expect("must be a trait implementation");
-
+
// Only care about `impl PartialEq<Foo> for Foo`
// For `impl PartialEq<B> for A, input_types is [A, B]
if trait_ref.substs.type_at(1) == ty {
} else {
"you are deriving `Hash` but have implemented `PartialEq` explicitly"
};
-
+
span_lint_and_then(
cx, DERIVE_HASH_XOR_EQ, span,
mess,
return;
}
}
+ for subst in substs {
+ if let ty::subst::UnpackedKind::Type(subst) = subst.unpack() {
+ if let ty::TyParam(_) = subst.sty {
+ return;
+ }
+ }
+ }
},
_ => (),
}
EXPL_IMPL_CLONE_ON_COPY,
item.span,
"you are implementing `Clone` explicitly on a `Copy` type",
- |db| { db.span_note(item.span, "consider deriving `Clone` or removing `Copy`"); },
+ |db| {
+ db.span_note(item.span, "consider deriving `Clone` or removing `Copy`");
+ },
);
}
}