|
1 | | -use clippy_utils::diagnostics::span_lint; |
2 | | -use rustc_hir::{BorrowKind, Expr, ExprKind, Mutability}; |
| 1 | +use clippy_utils::diagnostics::span_lint_and_sugg; |
| 2 | +use clippy_utils::source::snippet; |
| 3 | +use rustc_errors::Applicability; |
| 4 | +use rustc_hir::{ |
| 5 | + AssocItemKind, BorrowKind, Expr, ExprKind, FieldDef, HirId, ImplItemRef, IsAuto, Item, ItemKind, Mod, Mutability, |
| 6 | + QPath, TraitItemRef, TyKind, Variant, VariantData, |
| 7 | +}; |
3 | 8 | use rustc_lint::{LateContext, LateLintPass}; |
4 | | -use rustc_middle::ty::{self, Ty}; |
| 9 | +use rustc_middle::ty::print::with_forced_trimmed_paths; |
| 10 | +use rustc_middle::ty::{self, GenericArgKind, Ty}; |
5 | 11 | use rustc_session::declare_lint_pass; |
| 12 | +use rustc_span::symbol::sym; |
6 | 13 | use std::iter; |
7 | 14 |
|
8 | 15 | declare_clippy_lint! { |
@@ -86,11 +93,16 @@ fn check_arguments<'tcx>( |
86 | 93 | match parameter.kind() { |
87 | 94 | ty::Ref(_, _, Mutability::Not) | ty::RawPtr(_, Mutability::Not) => { |
88 | 95 | if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Mut, _) = argument.kind { |
89 | | - span_lint( |
| 96 | + let snippet = snippet(cx, argument.span, ".."); |
| 97 | + let trimmed_snippet = &snippet[5..]; |
| 98 | + span_lint_and_sugg( |
90 | 99 | cx, |
91 | 100 | UNNECESSARY_MUT_PASSED, |
92 | 101 | argument.span, |
93 | 102 | format!("the {fn_kind} `{name}` doesn't need a mutable reference"), |
| 103 | + "try", |
| 104 | + format!("&{trimmed_snippet}"), |
| 105 | + Applicability::MachineApplicable, |
94 | 106 | ); |
95 | 107 | } |
96 | 108 | }, |
|
0 commit comments