@@ -481,16 +481,11 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Loops {
481
481
}
482
482
483
483
// check for never_loop
484
- match expr. node {
485
- ExprKind :: While ( _, ref block, _) | ExprKind :: Loop ( ref block, _, _) => {
486
- match never_loop_block ( block, expr. hir_id ) {
487
- NeverLoopResult :: AlwaysBreak => {
488
- span_lint ( cx, NEVER_LOOP , expr. span , "this loop never actually loops" )
489
- } ,
490
- NeverLoopResult :: MayContinueMainLoop | NeverLoopResult :: Otherwise => ( ) ,
491
- }
492
- } ,
493
- _ => ( ) ,
484
+ if let ExprKind :: Loop ( ref block, _, _) = expr. node {
485
+ match never_loop_block ( block, expr. hir_id ) {
486
+ NeverLoopResult :: AlwaysBreak => span_lint ( cx, NEVER_LOOP , expr. span , "this loop never actually loops" ) ,
487
+ NeverLoopResult :: MayContinueMainLoop | NeverLoopResult :: Otherwise => ( ) ,
488
+ }
494
489
}
495
490
496
491
// check for `loop { if let {} else break }` that could be `while let`
@@ -590,9 +585,8 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Loops {
590
585
}
591
586
}
592
587
593
- // check for while loops which conditions never change
594
- if let ExprKind :: While ( ref cond, _, _) = expr. node {
595
- check_infinite_loop ( cx, cond, expr) ;
588
+ if let Some ( ( cond, body) ) = higher:: while_loop ( & expr) {
589
+ check_infinite_loop ( cx, cond, body) ;
596
590
}
597
591
598
592
check_needless_collect ( expr, cx) ;
@@ -701,12 +695,6 @@ fn never_loop_expr(expr: &Expr, main_loop_id: HirId) -> NeverLoopResult {
701
695
// Break can come from the inner loop so remove them.
702
696
absorb_break ( & never_loop_block ( b, main_loop_id) )
703
697
} ,
704
- ExprKind :: While ( ref e, ref b, _) => {
705
- let e = never_loop_expr ( e, main_loop_id) ;
706
- let result = never_loop_block ( b, main_loop_id) ;
707
- // Break can come from the inner loop so remove them.
708
- combine_seq ( e, absorb_break ( & result) )
709
- } ,
710
698
ExprKind :: Match ( ref e, ref arms, _) => {
711
699
let e = never_loop_expr ( e, main_loop_id) ;
712
700
if arms. is_empty ( ) {
@@ -2202,7 +2190,7 @@ fn var_def_id(cx: &LateContext<'_, '_>, expr: &Expr) -> Option<HirId> {
2202
2190
2203
2191
fn is_loop ( expr : & Expr ) -> bool {
2204
2192
match expr. node {
2205
- ExprKind :: Loop ( ..) | ExprKind :: While ( .. ) => true ,
2193
+ ExprKind :: Loop ( ..) => true ,
2206
2194
_ => false ,
2207
2195
}
2208
2196
}
@@ -2239,11 +2227,10 @@ fn is_loop_nested(cx: &LateContext<'_, '_>, loop_expr: &Expr, iter_expr: &Expr)
2239
2227
return false ;
2240
2228
}
2241
2229
match cx. tcx . hir ( ) . find ( parent) {
2242
- Some ( Node :: Expr ( expr) ) => match expr . node {
2243
- ExprKind :: Loop ( .. ) | ExprKind :: While ( ..) => {
2230
+ Some ( Node :: Expr ( expr) ) => {
2231
+ if let ExprKind :: Loop ( ..) = expr . node {
2244
2232
return true ;
2245
- } ,
2246
- _ => ( ) ,
2233
+ } ;
2247
2234
} ,
2248
2235
Some ( Node :: Block ( block) ) => {
2249
2236
let mut block_visitor = LoopNestVisitor {
0 commit comments