Don't trigger while_let_on_iterator when the iterator is recreated every iteration

This commit is contained in:
flip1995 2020-04-25 20:51:02 +02:00
parent 6ffe725bbc
commit eadd9d24dc
No known key found for this signature in database
GPG Key ID: 2CEFCDB27ED0BE79

View File

@ -566,6 +566,17 @@ fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr<'_>) {
) = (pat, &match_expr.kind)
{
let iter_expr = &method_args[0];
// Don't lint when the iterator is recreated on every iteration
if_chain! {
if let ExprKind::MethodCall(..) | ExprKind::Call(..) = iter_expr.kind;
if let Some(iter_def_id) = get_trait_def_id(cx, &paths::ITERATOR);
if implements_trait(cx, cx.tables.expr_ty(iter_expr), iter_def_id, &[]);
then {
return;
}
}
let lhs_constructor = last_path_segment(qpath);
if method_path.ident.name == sym!(next)
&& match_trait_method(cx, match_expr, &paths::ITERATOR)