22 lines
726 B
Rust
22 lines
726 B
Rust
use clippy_utils::diagnostics::span_lint;
|
|
use rustc_hir::def::{CtorKind, CtorOf, DefKind, Res};
|
|
use rustc_hir::{Expr, ExprKind};
|
|
use rustc_lint::LateContext;
|
|
use rustc_middle::ty::{self, Ty};
|
|
|
|
use super::CAST_ENUM_CONSTRUCTOR;
|
|
|
|
pub(super) fn check(cx: &LateContext<'_>, expr: &Expr<'_>, cast_expr: &Expr<'_>, cast_from: Ty<'_>) {
|
|
if matches!(cast_from.kind(), ty::FnDef(..))
|
|
&& let ExprKind::Path(path) = &cast_expr.kind
|
|
&& let Res::Def(DefKind::Ctor(CtorOf::Variant, CtorKind::Fn), _) = cx.qpath_res(path, cast_expr.hir_id)
|
|
{
|
|
span_lint(
|
|
cx,
|
|
CAST_ENUM_CONSTRUCTOR,
|
|
expr.span,
|
|
"cast of an enum tuple constructor to an integer",
|
|
);
|
|
}
|
|
}
|