diff --git a/clippy_lints/src/utils/higher.rs b/clippy_lints/src/utils/higher.rs index 494182ae545..5113f1224fe 100644 --- a/clippy_lints/src/utils/higher.rs +++ b/clippy_lints/src/utils/higher.rs @@ -129,16 +129,13 @@ pub fn for_loop(expr: &hir::Expr) -> Option<(&hir::Pat, &hir::Expr, &hir::Expr)> let hir::ExprCall(_, ref iterargs) = iterexpr.node, iterargs.len() == 1 && arms.len() == 1 && arms[0].guard.is_none(), let hir::ExprLoop(ref block, _, _) = arms[0].body.node, - block.stmts.is_empty(), - let Some(ref loopexpr) = block.expr, - let hir::ExprMatch(_, ref innerarms, hir::MatchSource::ForLoopDesugar) = loopexpr.node, - innerarms.len() == 2 && innerarms[0].pats.len() == 1, - let hir::PatKind::TupleStruct(_, ref somepats, _) = innerarms[0].pats[0].node, - somepats.len() == 1 + block.expr.is_none(), + let [ ref let_stmt, ref body ] = *block.stmts, + let hir::StmtDecl(ref decl, _) = let_stmt.node, + let hir::DeclLocal(ref decl) = decl.node, + let hir::StmtExpr(ref expr, _) = body.node, ], { - return Some((&somepats[0], - &iterargs[0], - &innerarms[0].body)); + return Some((&*decl.pat, &iterargs[0], expr)); }} None }