Skip to content

Commit 632e346

Browse files
committed
Fix NonZero clippy lint.
1 parent 528da84 commit 632e346

File tree

1 file changed

+32
-19
lines changed

1 file changed

+32
-19
lines changed

src/tools/clippy/clippy_lints/src/transmute/transmute_int_to_non_zero.rs

+32-19
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,53 @@ pub(super) fn check<'tcx>(
1616
to_ty: Ty<'tcx>,
1717
arg: &'tcx Expr<'_>,
1818
) -> bool {
19-
let (ty::Int(_) | ty::Uint(_), Some(to_ty_adt)) = (&from_ty.kind(), to_ty.ty_adt_def()) else {
19+
let tcx = cx.tcx;
20+
21+
let (ty::Int(_) | ty::Uint(_), ty::Adt(adt, substs)) = (&from_ty.kind(), to_ty.kind()) else {
2022
return false;
2123
};
22-
let Some(to_type_sym) = cx.tcx.get_diagnostic_name(to_ty_adt.did()) else {
24+
25+
if !tcx.is_diagnostic_item(sym::NonZero, adt.did()) {
2326
return false;
2427
};
2528

26-
if !matches!(
27-
to_type_sym,
28-
sym::NonZeroU8
29-
| sym::NonZeroU16
30-
| sym::NonZeroU32
31-
| sym::NonZeroU64
32-
| sym::NonZeroU128
33-
| sym::NonZeroI8
34-
| sym::NonZeroI16
35-
| sym::NonZeroI32
36-
| sym::NonZeroI64
37-
| sym::NonZeroI128
38-
) {
39-
return false;
40-
}
29+
let coercable_types = [
30+
("NonZeroU8", tcx.types.u8),
31+
("NonZeroU16", tcx.types.u16),
32+
("NonZeroU32", tcx.types.u32),
33+
("NonZeroU64", tcx.types.u64),
34+
("NonZeroU128", tcx.types.u128),
35+
("NonZeroI8", tcx.types.i8),
36+
("NonZeroI16", tcx.types.i16),
37+
("NonZeroI32", tcx.types.i32),
38+
("NonZeroI64", tcx.types.i64),
39+
("NonZeroI128", tcx.types.i128),
40+
];
41+
42+
let int_type = substs.type_at(0);
43+
44+
let Some(nonzero_alias) = coercable_types
45+
.iter()
46+
.find_map(|(nonzero_alias, t)| {
47+
if *t == int_type && *t == from_ty {
48+
Some(nonzero_alias)
49+
} else {
50+
None
51+
}
52+
})
53+
else { return false; };
4154

4255
span_lint_and_then(
4356
cx,
4457
TRANSMUTE_INT_TO_NON_ZERO,
4558
e.span,
46-
&format!("transmute from a `{from_ty}` to a `{to_type_sym}`"),
59+
&format!("transmute from a `{from_ty}` to a `{nonzero_alias}`"),
4760
|diag| {
4861
let arg = sugg::Sugg::hir(cx, arg, "..");
4962
diag.span_suggestion(
5063
e.span,
5164
"consider using",
52-
format!("{to_type_sym}::{}({arg})", sym::new_unchecked),
65+
format!("{nonzero_alias}::{}({arg})", sym::new_unchecked),
5366
Applicability::Unspecified,
5467
);
5568
},

0 commit comments

Comments
 (0)