-pub(super) fn check(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, loop_block: &'tcx Block<'_>) {
- // extract the expression from the first statement (if any) in a block
- let inner_stmt_expr = extract_expr_from_first_stmt(loop_block);
- // or extract the first expression (if any) from the block
- if let Some(inner) = inner_stmt_expr.or_else(|| extract_first_expr(loop_block)) {
- if let Some(higher::IfLet {
- let_pat,
- let_expr,
- if_else: Some(if_else),
- ..
- }) = higher::IfLet::hir(inner)
- {
- if is_simple_break_expr(if_else) {
- could_be_while_let(cx, expr, let_pat, let_expr);
- }
- }
-
- if let ExprKind::Match(ref matchexpr, ref arms, MatchSource::Normal) = inner.kind {
- if arms.len() == 2
- && arms[0].guard.is_none()
- && arms[1].guard.is_none()
- && is_simple_break_expr(&arms[1].body)
+pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, loop_block: &'tcx Block<'_>) {
+ let (init, has_trailing_exprs) = match (loop_block.stmts, loop_block.expr) {
+ ([stmt, stmts @ ..], expr) => {
+ if let StmtKind::Local(&Local {
+ init: Some(e),
+ els: None,
+ ..
+ })
+ | StmtKind::Semi(e)
+ | StmtKind::Expr(e) = stmt.kind