| use clippy_utils::diagnostics::span_lint_and_then; | |
| use rustc_errors::Applicability; | |
| use rustc_hir::{Expr, Ty, TyKind}; | |
| use rustc_lint::LateContext; | |
| use rustc_middle::ty::IsSuggestable; | |
| use super::AS_UNDERSCORE; | |
| pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, ty: &'tcx Ty<'_>) { | |
| if matches!(ty.kind, TyKind::Infer(())) { | |
| span_lint_and_then(cx, AS_UNDERSCORE, expr.span, "using `as _` conversion", |diag| { | |
| let ty_resolved = cx.typeck_results().expr_ty(expr); | |
| if ty_resolved.is_suggestable(cx.tcx, true) { | |
| diag.span_suggestion( | |
| ty.span, | |
| "consider giving the type explicitly", | |
| ty_resolved, | |
| Applicability::MachineApplicable, | |
| ); | |
| } else { | |
| diag.help("consider giving the type explicitly"); | |
| } | |
| }); | |
| } | |
| } |