add limit for unclosed delimiters in lexer diagnostic
This commit is contained in:
parent
9a5e41c56f
commit
94a3fd7678
4 changed files with 25 additions and 32 deletions
|
@ -72,16 +72,31 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
|
||||||
fn eof_err(&mut self) -> PErr<'psess> {
|
fn eof_err(&mut self) -> PErr<'psess> {
|
||||||
let msg = "this file contains an unclosed delimiter";
|
let msg = "this file contains an unclosed delimiter";
|
||||||
let mut err = self.string_reader.dcx().struct_span_err(self.token.span, msg);
|
let mut err = self.string_reader.dcx().struct_span_err(self.token.span, msg);
|
||||||
for &(_, sp) in &self.diag_info.open_braces {
|
|
||||||
err.span_label(sp, "unclosed delimiter");
|
let unclosed_delimiter_show_limit = 5;
|
||||||
|
let len = usize::min(unclosed_delimiter_show_limit, self.diag_info.open_braces.len());
|
||||||
|
for &(_, span) in &self.diag_info.open_braces[..len] {
|
||||||
|
err.span_label(span, "unclosed delimiter");
|
||||||
self.diag_info.unmatched_delims.push(UnmatchedDelim {
|
self.diag_info.unmatched_delims.push(UnmatchedDelim {
|
||||||
found_delim: None,
|
found_delim: None,
|
||||||
found_span: self.token.span,
|
found_span: self.token.span,
|
||||||
unclosed_span: Some(sp),
|
unclosed_span: Some(span),
|
||||||
candidate_span: None,
|
candidate_span: None,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some((_, span)) = self.diag_info.open_braces.get(unclosed_delimiter_show_limit)
|
||||||
|
&& self.diag_info.open_braces.len() >= unclosed_delimiter_show_limit + 2
|
||||||
|
{
|
||||||
|
err.span_label(
|
||||||
|
*span,
|
||||||
|
format!(
|
||||||
|
"another {} unclosed delimiters begin from here",
|
||||||
|
self.diag_info.open_braces.len() - unclosed_delimiter_show_limit
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if let Some((delim, _)) = self.diag_info.open_braces.last() {
|
if let Some((delim, _)) = self.diag_info.open_braces.last() {
|
||||||
report_suspicious_mismatch_block(
|
report_suspicious_mismatch_block(
|
||||||
&mut err,
|
&mut err,
|
||||||
|
|
|
@ -17,14 +17,8 @@ LL | fn qux() {
|
||||||
| - unclosed delimiter
|
| - unclosed delimiter
|
||||||
...
|
...
|
||||||
LL | fn foo() {
|
LL | fn foo() {
|
||||||
| - unclosed delimiter
|
| - another 3 unclosed delimiters begin from here
|
||||||
...
|
...
|
||||||
LL | fn bar() {
|
|
||||||
| - unclosed delimiter
|
|
||||||
...
|
|
||||||
LL | fn baz() {
|
|
||||||
| - unclosed delimiter
|
|
||||||
LL | if false {
|
|
||||||
LL | {
|
LL | {
|
||||||
| - this delimiter might not be properly closed...
|
| - this delimiter might not be properly closed...
|
||||||
LL | && let () = ()
|
LL | && let () = ()
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// ignore-tidy-trailing-newlines
|
|
||||||
// issue: rust-lang/rust#127868
|
// issue: rust-lang/rust#127868
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let a = [[[[[[[[[[[[[[[[[[[[1, {, (, [,;
|
let a = [[[[[[[[[[[[[[[[[[[[1, {, (, [,;
|
||||||
} //~ ERROR mismatched closing delimiter: `}`
|
} //~ ERROR mismatched closing delimiter: `}`
|
||||||
//~ ERROR this file contains an unclosed delimiter
|
//~ ERROR this file contains an unclosed delimiter
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error: mismatched closing delimiter: `}`
|
error: mismatched closing delimiter: `}`
|
||||||
--> $DIR/mismatched-delimiter-corner-case-issue-127868.rs:5:42
|
--> $DIR/mismatched-delimiter-corner-case-issue-127868.rs:4:42
|
||||||
|
|
|
|
||||||
LL | fn main() {
|
LL | fn main() {
|
||||||
| - closing delimiter possibly meant for this
|
| - closing delimiter possibly meant for this
|
||||||
|
@ -9,29 +9,14 @@ LL | }
|
||||||
| ^ mismatched closing delimiter
|
| ^ mismatched closing delimiter
|
||||||
|
|
||||||
error: this file contains an unclosed delimiter
|
error: this file contains an unclosed delimiter
|
||||||
--> $DIR/mismatched-delimiter-corner-case-issue-127868.rs:7:51
|
--> $DIR/mismatched-delimiter-corner-case-issue-127868.rs:6:52
|
||||||
|
|
|
|
||||||
LL | fn main() {
|
LL | fn main() {
|
||||||
| - unclosed delimiter
|
| - unclosed delimiter
|
||||||
LL | let a = [[[[[[[[[[[[[[[[[[[[1, {, (, [,;
|
LL | let a = [[[[[[[[[[[[[[[[[[[[1, {, (, [,;
|
||||||
| -------------------- - this delimiter might not be properly closed...
|
| ----- - this delimiter might not be properly closed...
|
||||||
| ||||||||||||||||||||
|
| |||||
|
||||||
| |||||||||||||||||||unclosed delimiter
|
| ||||another 16 unclosed delimiters begin from here
|
||||||
| ||||||||||||||||||unclosed delimiter
|
|
||||||
| |||||||||||||||||unclosed delimiter
|
|
||||||
| ||||||||||||||||unclosed delimiter
|
|
||||||
| |||||||||||||||unclosed delimiter
|
|
||||||
| ||||||||||||||unclosed delimiter
|
|
||||||
| |||||||||||||unclosed delimiter
|
|
||||||
| ||||||||||||unclosed delimiter
|
|
||||||
| |||||||||||unclosed delimiter
|
|
||||||
| ||||||||||unclosed delimiter
|
|
||||||
| |||||||||unclosed delimiter
|
|
||||||
| ||||||||unclosed delimiter
|
|
||||||
| |||||||unclosed delimiter
|
|
||||||
| ||||||unclosed delimiter
|
|
||||||
| |||||unclosed delimiter
|
|
||||||
| ||||unclosed delimiter
|
|
||||||
| |||unclosed delimiter
|
| |||unclosed delimiter
|
||||||
| ||unclosed delimiter
|
| ||unclosed delimiter
|
||||||
| |unclosed delimiter
|
| |unclosed delimiter
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue