@@ -34,9 +34,12 @@ pub(super) fn same_indentation_level(sm: &SourceMap, open_sp: Span, close_sp: Sp
3434
3535// When we get a `)` or `]` for `{`, we should emit help message here 
3636// it's more friendly compared to report `unmatched error` in later phase 
37- fn  report_missing_open_delim ( err :  & mut  Diag < ' _ > ,  unmatched_delims :  & [ UnmatchedDelim ] )  -> bool  { 
37+ pub ( super )  fn  report_missing_open_delim ( 
38+     err :  & mut  Diag < ' _ > , 
39+     unmatched_delims :  & mut  Vec < UnmatchedDelim > , 
40+ )  -> bool  { 
3841    let  mut  reported_missing_open = false ; 
39-     for  unmatch_brace  in   unmatched_delims. iter ( )  { 
42+     unmatched_delims. retain ( |unmatch_brace|  { 
4043        if  let  Some ( delim)  = unmatch_brace. found_delim 
4144            && matches ! ( delim,  Delimiter :: Parenthesis  | Delimiter :: Bracket ) 
4245        { 
@@ -45,13 +48,20 @@ fn report_missing_open_delim(err: &mut Diag<'_>, unmatched_delims: &[UnmatchedDe
4548                Delimiter :: Bracket  => "[" , 
4649                _ => unreachable ! ( ) , 
4750            } ; 
51+ 
52+             if  let  Some ( unclosed_span)  = unmatch_brace. unclosed_span  { 
53+                 err. span_label ( unclosed_span,  "the nearest open delimiter" ) ; 
54+             } 
4855            err. span_label ( 
4956                unmatch_brace. found_span . shrink_to_lo ( ) , 
5057                format ! ( "missing open `{missed_open}` for this delimiter" ) , 
5158            ) ; 
5259            reported_missing_open = true ; 
60+             false 
61+         }  else  { 
62+             true 
5363        } 
54-     } 
64+     } ) ; 
5565    reported_missing_open
5666} 
5767
@@ -61,10 +71,6 @@ pub(super) fn report_suspicious_mismatch_block(
6171    sm :  & SourceMap , 
6272    delim :  Delimiter , 
6373)  { 
64-     if  report_missing_open_delim ( err,  & diag_info. unmatched_delims )  { 
65-         return ; 
66-     } 
67- 
6874    let  mut  matched_spans:  Vec < ( Span ,  bool ) >  = diag_info
6975        . matching_block_spans 
7076        . iter ( ) 
0 commit comments