Dont lint on match pattern-binding
Fixes #9347 Technically it is possible to have a blank match-pattern that does nothing, and we fail to lint. But its easier to be safe than sorry here.
This commit is contained in:
parent
c419d0a8b5
commit
e87a5a1cc5
@ -123,7 +123,7 @@ fn check_if_let_some_or_err_and_early_return<'tcx>(cx: &LateContext<'tcx>, expr:
|
|||||||
if let Some(higher::IfLet { let_pat, let_expr, if_then, if_else }) = higher::IfLet::hir(cx, expr);
|
if let Some(higher::IfLet { let_pat, let_expr, if_then, if_else }) = higher::IfLet::hir(cx, expr);
|
||||||
if !is_else_clause(cx.tcx, expr);
|
if !is_else_clause(cx.tcx, expr);
|
||||||
if let PatKind::TupleStruct(ref path1, [field], None) = let_pat.kind;
|
if let PatKind::TupleStruct(ref path1, [field], None) = let_pat.kind;
|
||||||
if let PatKind::Binding(annot, bind_id, ident, _) = field.kind;
|
if let PatKind::Binding(annot, bind_id, ident, None) = field.kind;
|
||||||
let caller_ty = cx.typeck_results().expr_ty(let_expr);
|
let caller_ty = cx.typeck_results().expr_ty(let_expr);
|
||||||
let if_block = IfBlockType::IfLet(path1, caller_ty, ident.name, let_expr, if_then, if_else);
|
let if_block = IfBlockType::IfLet(path1, caller_ty, ident.name, let_expr, if_then, if_else);
|
||||||
if (is_early_return(sym::Option, cx, &if_block) && path_to_local_id(peel_blocks(if_then), bind_id))
|
if (is_early_return(sym::Option, cx, &if_block) && path_to_local_id(peel_blocks(if_then), bind_id))
|
||||||
|
@ -207,4 +207,19 @@ fn option_map() -> Option<bool> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct PatternedError {
|
||||||
|
flag: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
// No warning
|
||||||
|
fn pattern() -> Result<(), PatternedError> {
|
||||||
|
let res = Ok(());
|
||||||
|
|
||||||
|
if let Err(err @ PatternedError { flag: true }) = res {
|
||||||
|
return Err(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
res
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -243,4 +243,19 @@ fn option_map() -> Option<bool> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct PatternedError {
|
||||||
|
flag: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
// No warning
|
||||||
|
fn pattern() -> Result<(), PatternedError> {
|
||||||
|
let res = Ok(());
|
||||||
|
|
||||||
|
if let Err(err @ PatternedError { flag: true }) = res {
|
||||||
|
return Err(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
res
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
Loading…
Reference in New Issue
Block a user