mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-10 23:24:24 +00:00
Don't lint when matching &&mut
by &ref
(Fix #1432)
This commit is contained in:
parent
5e7727119e
commit
c9091b71a1
2 changed files with 19 additions and 9 deletions
|
@ -58,14 +58,15 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NeedlessBorrow {
|
|||
if in_macro(cx, pat.span) {
|
||||
return;
|
||||
}
|
||||
if let PatKind::Binding(BindingMode::BindByRef(MutImmutable), _, _, _) = pat.node {
|
||||
if let ty::TyRef(_, ref tam) = cx.tcx.tables().pat_ty(pat).sty {
|
||||
if tam.mutbl == MutImmutable {
|
||||
if let ty::TyRef(..) = tam.ty.sty {
|
||||
span_lint(cx, NEEDLESS_BORROW, pat.span, "this pattern creates a reference to a reference")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if_let_chain! {[
|
||||
let PatKind::Binding(BindingMode::BindByRef(MutImmutable), _, _, _) = pat.node,
|
||||
let ty::TyRef(_, ref tam) = cx.tcx.tables().pat_ty(pat).sty,
|
||||
tam.mutbl == MutImmutable,
|
||||
let ty::TyRef(_, ref tam) = tam.ty.sty,
|
||||
// only lint immutable refs, because borrowed `&mut T` cannot be moved out
|
||||
tam.mutbl == MutImmutable,
|
||||
], {
|
||||
span_lint(cx, NEEDLESS_BORROW, pat.span, "this pattern creates a reference to a reference")
|
||||
}}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,3 +33,12 @@ trait Trait {}
|
|||
impl<'a> Trait for &'a str {}
|
||||
|
||||
fn h(_: &Trait) {}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn issue_1432() {
|
||||
let mut v = Vec::<String>::new();
|
||||
let _ = v.iter_mut().filter(|&ref a| a.is_empty());
|
||||
let _ = v.iter().filter(|&ref a| a.is_empty());
|
||||
//~^WARNING this pattern creates a reference to a reference
|
||||
let _ = v.iter().filter(|&a| a.is_empty());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue