@@ -81,16 +81,23 @@ impl<'a> StringReader<'a> {
81
81
// Incorrect delimiter.
82
82
token:: CloseDelim ( other) => {
83
83
let token_str = token_to_string ( & self . token ) ;
84
- let msg = format ! ( "incorrect close delimiter: `{}`" , token_str) ;
85
- let mut err = self . sess . span_diagnostic . struct_span_err ( self . span , & msg) ;
86
- // This is a conservative error: only report the last unclosed delimiter.
87
- // The previous unclosed delimiters could actually be closed! The parser
88
- // just hasn't gotten to them yet.
89
- if let Some ( & ( _, sp) ) = self . open_braces . last ( ) {
90
- err. span_note ( sp, "unclosed delimiter" ) ;
91
- } ;
92
- err. emit ( ) ;
93
-
84
+ if self . last_unclosed_found_span != Some ( self . span ) {
85
+ // do not complain about the same unclosed delimiter multiple times
86
+ self . last_unclosed_found_span = Some ( self . span ) ;
87
+ let msg = format ! ( "incorrect close delimiter: `{}`" , token_str) ;
88
+ let mut err = self . sess . span_diagnostic . struct_span_err (
89
+ self . span ,
90
+ & msg,
91
+ ) ;
92
+ err. span_label ( self . span , "incorrect close delimiter" ) ;
93
+ // This is a conservative error: only report the last unclosed
94
+ // delimiter. The previous unclosed delimiters could actually be
95
+ // closed! The parser just hasn't gotten to them yet.
96
+ if let Some ( & ( _, sp) ) = self . open_braces . last ( ) {
97
+ err. span_label ( sp, "unclosed delimiter" ) ;
98
+ } ;
99
+ err. emit ( ) ;
100
+ }
94
101
self . open_braces . pop ( ) . unwrap ( ) ;
95
102
96
103
// If the incorrect delimiter matches an earlier opening
@@ -122,7 +129,8 @@ impl<'a> StringReader<'a> {
122
129
// matching opening delimiter).
123
130
let token_str = token_to_string ( & self . token ) ;
124
131
let msg = format ! ( "unexpected close delimiter: `{}`" , token_str) ;
125
- let err = self . sess . span_diagnostic . struct_span_err ( self . span , & msg) ;
132
+ let mut err = self . sess . span_diagnostic . struct_span_err ( self . span , & msg) ;
133
+ err. span_label ( self . span , "unexpected close delimiter" ) ;
126
134
Err ( err)
127
135
} ,
128
136
_ => {
0 commit comments