@@ -14,7 +14,7 @@ use rustc_span::symbol::sym;
1414use rustc_span:: Symbol ;
1515
1616pub ( super ) fn check < ' tcx > ( cx : & LateContext < ' tcx > , expr : & ' tcx Expr < ' _ > ) {
17- if let Some ( higher:: WhileLet { if_then, let_pat, let_expr, .. } ) = higher:: WhileLet :: hir ( expr)
17+ if let Some ( higher:: WhileLet { if_then, let_pat, let_expr, label , .. } ) = higher:: WhileLet :: hir ( expr)
1818 // check for `Some(..)` pattern
1919 && let PatKind :: TupleStruct ( ref pat_path, some_pat, _) = let_pat. kind
2020 && is_res_lang_ctor ( cx, cx. qpath_res ( pat_path, let_pat. hir_id ) , LangItem :: OptionSome )
@@ -27,6 +27,9 @@ pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
2727 && !uses_iter ( cx, & iter_expr_struct, if_then)
2828 {
2929 let mut applicability = Applicability :: MachineApplicable ;
30+
31+ let loop_label = label. map_or ( String :: new ( ) , |l| format ! ( "{}: " , l. ident. name) ) ;
32+
3033 let loop_var = if let Some ( some_pat) = some_pat. first ( ) {
3134 if is_refutable ( cx, some_pat) {
3235 // Refutable patterns don't work with for loops.
@@ -57,7 +60,7 @@ pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
5760 expr. span . with_hi ( let_expr. span . hi ( ) ) ,
5861 "this loop could be written as a `for` loop" ,
5962 "try" ,
60- format ! ( "for {loop_var} in {iterator}{by_ref}" ) ,
63+ format ! ( "{loop_label} for {loop_var} in {iterator}{by_ref}" ) ,
6164 applicability,
6265 ) ;
6366 }
0 commit comments