1 use clippy_utils::diagnostics::span_lint_and_sugg;
2 use clippy_utils::path_res;
3 use clippy_utils::source::snippet_opt;
4 use clippy_utils::ty::is_type_diagnostic_item;
5 use clippy_utils::usage::local_used_after_expr;
6 use rustc_errors::Applicability;
7 use rustc_hir::def::Res;
9 use rustc_lint::LateContext;
12 use super::NEEDLESS_OPTION_AS_DEREF;
14 pub(super) fn check(cx: &LateContext<'_>, expr: &Expr<'_>, recv: &Expr<'_>, name: &str) {
15 let typeck = cx.typeck_results();
16 let outer_ty = typeck.expr_ty(expr);
18 if is_type_diagnostic_item(cx, outer_ty, sym::Option) && outer_ty == typeck.expr_ty(recv) {
19 if name == "as_deref_mut" && recv.is_syntactic_place_expr() {
20 let Res::Local(binding_id) = path_res(cx, recv) else { return };
22 if local_used_after_expr(cx, binding_id, recv) {
29 NEEDLESS_OPTION_AS_DEREF,
31 "derefed type is same as origin",
33 snippet_opt(cx, recv.span).unwrap(),
34 Applicability::MachineApplicable,