@@ -14,7 +14,7 @@ use rustc_span::symbol::sym;
14
14
use rustc_span:: Symbol ;
15
15
16
16
pub ( 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)
18
18
// check for `Some(..)` pattern
19
19
&& let PatKind :: TupleStruct ( ref pat_path, some_pat, _) = let_pat. kind
20
20
&& 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<'_>) {
27
27
&& !uses_iter ( cx, & iter_expr_struct, if_then)
28
28
{
29
29
let mut applicability = Applicability :: MachineApplicable ;
30
+
31
+ let loop_label = label. map_or ( String :: new ( ) , |l| format ! ( "{}: " , l. ident. name) ) ;
32
+
30
33
let loop_var = if let Some ( some_pat) = some_pat. first ( ) {
31
34
if is_refutable ( cx, some_pat) {
32
35
// Refutable patterns don't work with for loops.
@@ -57,7 +60,7 @@ pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
57
60
expr. span . with_hi ( let_expr. span . hi ( ) ) ,
58
61
"this loop could be written as a `for` loop" ,
59
62
"try" ,
60
- format ! ( "for {loop_var} in {iterator}{by_ref}" ) ,
63
+ format ! ( "{loop_label} for {loop_var} in {iterator}{by_ref}" ) ,
61
64
applicability,
62
65
) ;
63
66
}
0 commit comments