mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-14 01:25:54 +00:00
Merge pull request #1433 from sinkuu/ref
Don't lint needless_borrow when matching `&&mut` by `&ref`
This commit is contained in:
commit
3cc5596466
@ -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 New Issue
Block a user