Skip to content

Commit fcdbd21

Browse files
committed
add limit for unclosed delimiters in lexer diagnostic
1 parent 521874a commit fcdbd21

File tree

2 files changed

+20
-21
lines changed

2 files changed

+20
-21
lines changed

compiler/rustc_parse/src/lexer/tokentrees.rs

+17-3
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,30 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
7272
fn eof_err(&mut self) -> PErr<'psess> {
7373
let msg = "this file contains an unclosed delimiter";
7474
let mut err = self.string_reader.dcx().struct_span_err(self.token.span, msg);
75-
for &(_, sp) in &self.diag_info.open_braces {
76-
err.span_label(sp, "unclosed delimiter");
75+
76+
let unclosed_delimiter_show_limits = 5;
77+
for &(_, span) in &self.diag_info.open_braces[..unclosed_delimiter_show_limits] {
78+
err.span_label(span, "unclosed delimiter");
7779
self.diag_info.unmatched_delims.push(UnmatchedDelim {
7880
found_delim: None,
7981
found_span: self.token.span,
80-
unclosed_span: Some(sp),
82+
unclosed_span: Some(span),
8183
candidate_span: None,
8284
});
8385
}
8486

87+
if let Some((_, span)) = self.diag_info.open_braces.get(unclosed_delimiter_show_limits)
88+
&& self.diag_info.open_braces.len() >= unclosed_delimiter_show_limits + 2
89+
{
90+
err.span_label(
91+
*span,
92+
format!(
93+
"another {} unclosed delimiters begin from here",
94+
self.diag_info.open_braces.len() - unclosed_delimiter_show_limits
95+
),
96+
);
97+
}
98+
8599
if let Some((delim, _)) = self.diag_info.open_braces.last() {
86100
report_suspicious_mismatch_block(
87101
&mut err,

tests/ui/parser/mismatched-delimiter-corner-case-issue-127868.stderr

+3-18
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,9 @@ error: this file contains an unclosed delimiter
1414
LL | fn main() {
1515
| - unclosed delimiter
1616
LL | let a = [[[[[[[[[[[[[[[[[[[[1, {, (, [,;
17-
| -------------------- - this delimiter might not be properly closed...
18-
| ||||||||||||||||||||
19-
| |||||||||||||||||||unclosed delimiter
20-
| ||||||||||||||||||unclosed delimiter
21-
| |||||||||||||||||unclosed delimiter
22-
| ||||||||||||||||unclosed delimiter
23-
| |||||||||||||||unclosed delimiter
24-
| ||||||||||||||unclosed delimiter
25-
| |||||||||||||unclosed delimiter
26-
| ||||||||||||unclosed delimiter
27-
| |||||||||||unclosed delimiter
28-
| ||||||||||unclosed delimiter
29-
| |||||||||unclosed delimiter
30-
| ||||||||unclosed delimiter
31-
| |||||||unclosed delimiter
32-
| ||||||unclosed delimiter
33-
| |||||unclosed delimiter
34-
| ||||unclosed delimiter
17+
| ----- - this delimiter might not be properly closed...
18+
| |||||
19+
| ||||another 16 unclosed delimiters begin from here
3520
| |||unclosed delimiter
3621
| ||unclosed delimiter
3722
| |unclosed delimiter

0 commit comments

Comments
 (0)