@@ -81,16 +81,23 @@ impl<'a> StringReader<'a> {
8181 // Incorrect delimiter.
8282 token:: CloseDelim ( other) => {
8383 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+ }
94101 self . open_braces . pop ( ) . unwrap ( ) ;
95102
96103 // If the incorrect delimiter matches an earlier opening
@@ -122,7 +129,8 @@ impl<'a> StringReader<'a> {
122129 // matching opening delimiter).
123130 let token_str = token_to_string ( & self . token ) ;
124131 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" ) ;
126134 Err ( err)
127135 } ,
128136 _ => {
0 commit comments