@@ -3,7 +3,9 @@ use rustc_ast::tokenstream::{DelimSpacing, DelimSpan, Spacing, TokenStream, Toke
3
3
use rustc_ast_pretty:: pprust:: token_to_string;
4
4
use rustc_errors:: Diag ;
5
5
6
- use super :: diagnostics:: { report_suspicious_mismatch_block, same_indentation_level} ;
6
+ use super :: diagnostics:: {
7
+ report_missing_open_delim, report_suspicious_mismatch_block, same_indentation_level,
8
+ } ;
7
9
use super :: { Lexer , UnmatchedDelim } ;
8
10
9
11
impl < ' psess , ' src > Lexer < ' psess , ' src > {
@@ -77,12 +79,12 @@ impl<'psess, 'src> Lexer<'psess, 'src> {
77
79
) ;
78
80
}
79
81
80
- if let Some ( ( delim, _) ) = self . diag_info . open_delimiters . last ( ) {
82
+ if let Some ( ( delim, _) ) = self . diag_info . open_delimiters . last ( ) . cloned ( ) {
81
83
report_suspicious_mismatch_block (
82
84
& mut err,
83
85
& self . diag_info ,
84
86
self . psess . source_map ( ) ,
85
- * delim,
87
+ delim,
86
88
)
87
89
}
88
90
err
@@ -244,8 +246,14 @@ impl<'psess, 'src> Lexer<'psess, 'src> {
244
246
let msg = format ! ( "unexpected closing delimiter: `{token_str}`" ) ;
245
247
let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
246
248
247
- report_suspicious_mismatch_block ( & mut err, & self . diag_info , self . psess . source_map ( ) , delim) ;
248
249
err. span_label ( self . token . span , "unexpected closing delimiter" ) ;
250
+
251
+ if report_missing_open_delim ( & mut err, & mut self . diag_info . unmatched_delims ) {
252
+ return err;
253
+ }
254
+
255
+ report_suspicious_mismatch_block ( & mut err, & self . diag_info , self . psess . source_map ( ) , delim) ;
256
+
249
257
err
250
258
}
251
259
}
0 commit comments