Skip to content

Commit 366d81d

Browse files
committed
update
Signed-off-by: xizheyin <[email protected]>
1 parent 31bbbcc commit 366d81d

18 files changed

+148
-69
lines changed

compiler/rustc_parse/src/lexer/diagnostics.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub(super) fn same_indentation_level(sm: &SourceMap, open_sp: Span, close_sp: Sp
3434

3535
// When we get a `)` or `]` for `{`, we should emit help message here
3636
// it's more friendly compared to report `unmatched error` in later phase
37-
fn report_missing_open_delim(
37+
pub(super) fn report_missing_open_delim(
3838
err: &mut Diag<'_>,
3939
unmatched_delims: &mut Vec<UnmatchedDelim>,
4040
) -> bool {
@@ -71,9 +71,7 @@ pub(super) fn report_suspicious_mismatch_block(
7171
sm: &SourceMap,
7272
delim: Delimiter,
7373
) {
74-
if report_missing_open_delim(err, &mut diag_info.unmatched_delims) {
75-
return;
76-
}
74+
7775

7876
let mut matched_spans: Vec<(Span, bool)> = diag_info
7977
.matching_block_spans

compiler/rustc_parse/src/lexer/tokentrees.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use rustc_ast::tokenstream::{DelimSpacing, DelimSpan, Spacing, TokenStream, Toke
33
use rustc_ast_pretty::pprust::token_to_string;
44
use rustc_errors::Diag;
55

6-
use super::diagnostics::{report_suspicious_mismatch_block, same_indentation_level};
6+
use super::diagnostics::{report_missing_open_delim, report_suspicious_mismatch_block, same_indentation_level};
77
use super::{Lexer, UnmatchedDelim};
88

99
impl<'psess, 'src> Lexer<'psess, 'src> {
@@ -244,13 +244,19 @@ impl<'psess, 'src> Lexer<'psess, 'src> {
244244
let msg = format!("unexpected closing delimiter: `{token_str}`");
245245
let mut err = self.dcx().struct_span_err(self.token.span, msg);
246246

247+
err.span_label(self.token.span, "unexpected closing delimiter");
248+
249+
if report_missing_open_delim(&mut err, &mut self.diag_info.unmatched_delims) {
250+
return err;
251+
}
252+
247253
report_suspicious_mismatch_block(
248254
&mut err,
249255
&mut self.diag_info,
250256
self.psess.source_map(),
251257
close_delim,
252258
);
253-
err.span_label(self.token.span, "unexpected closing delimiter");
259+
254260
err
255261
}
256262
}

tests/ui/parser/issues/issue-104367.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
struct S {
33
d: [u32; {
44
#![cfg] {
5-
#![w,)
5+
#![w,) //~ ERROR mismatched closing delimiter
66
//~ ERROR this file contains an unclosed delimiter

tests/ui/parser/issues/issue-104367.stderr

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
error: mismatched closing delimiter: `)`
2+
--> $DIR/issue-104367.rs:5:15
3+
|
4+
LL | #![w,)
5+
| ^ ^ mismatched closing delimiter
6+
| |
7+
| unclosed delimiter
8+
19
error: this file contains an unclosed delimiter
210
--> $DIR/issue-104367.rs:6:71
311
|
@@ -10,11 +18,8 @@ LL | d: [u32; {
1018
LL | #![cfg] {
1119
| - unclosed delimiter
1220
LL | #![w,)
13-
| - - missing open `(` for this delimiter
14-
| |
15-
| unclosed delimiter before unmatched delimiter
1621
LL |
1722
| ^
1823

19-
error: aborting due to 1 previous error
24+
error: aborting due to 2 previous errors
2025

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
//@ compile-flags: -Zunpretty=ast-tree
2-
//~v ERROR this file contains an unclosed delimiter
3-
#![c={#![c[)x
2+
#![c={#![c[)x //~ ERROR mismatched closing delimiter
3+
//~ ERROR this file contains an unclosed delimiter
Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
1+
error: mismatched closing delimiter: `)`
2+
--> $DIR/issue-105209.rs:2:11
3+
|
4+
LL | #![c={#![c[)x
5+
| ^^ mismatched closing delimiter
6+
| |
7+
| unclosed delimiter
8+
19
error: this file contains an unclosed delimiter
2-
--> $DIR/issue-105209.rs:3:15
10+
--> $DIR/issue-105209.rs:3:56
311
|
412
LL | #![c={#![c[)x
5-
| - - - -- ^
6-
| | | | ||
7-
| | | | |missing open `(` for this delimiter
8-
| | | | unclosed delimiter before unmatched delimiter
9-
| | | unclosed delimiter
13+
| - - - unclosed delimiter
14+
| | |
1015
| | unclosed delimiter
1116
| unclosed delimiter
17+
LL |
18+
| ^
1219

13-
error: aborting due to 1 previous error
20+
error: aborting due to 2 previous errors
1421

tests/ui/parser/issues/issue-62973.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
fn main() {}
44

5+
//~vvv ERROR mismatched closing delimiter: `)`
6+
//~vv ERROR mismatched closing delimiter: `)`
57
//~vvv ERROR this file contains an unclosed delimiter
68
fn p() { match s { v, E { [) {) }
79

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,29 @@
1+
error: mismatched closing delimiter: `)`
2+
--> $DIR/issue-62973.rs:8:27
3+
|
4+
LL | fn p() { match s { v, E { [) {) }
5+
| ^^ mismatched closing delimiter
6+
| |
7+
| unclosed delimiter
8+
9+
error: mismatched closing delimiter: `)`
10+
--> $DIR/issue-62973.rs:8:30
11+
|
12+
LL | fn p() { match s { v, E { [) {) }
13+
| ^^ mismatched closing delimiter
14+
| |
15+
| unclosed delimiter
16+
117
error: this file contains an unclosed delimiter
2-
--> $DIR/issue-62973.rs:8:2
18+
--> $DIR/issue-62973.rs:10:2
319
|
420
LL | fn p() { match s { v, E { [) {) }
5-
| - - -- -- missing open `(` for this delimiter
6-
| | | || |
7-
| | | || unclosed delimiter before unmatched delimiter
8-
| | | |missing open `(` for this delimiter
9-
| | | unclosed delimiter before unmatched delimiter
10-
| | unclosed delimiter
21+
| - - unclosed delimiter
22+
| |
1123
| unclosed delimiter
1224
LL |
1325
LL |
1426
| ^
1527

16-
error: aborting due to 1 previous error
28+
error: aborting due to 3 previous errors
1729

tests/ui/parser/issues/issue-63116.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
// fixed by #66361
2+
//~vv ERROR mismatched closing delimiter: `]`
23
//~v ERROR this file contains an unclosed delimiter
34
impl W <s(f;Y(;]
Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1+
error: mismatched closing delimiter: `]`
2+
--> $DIR/issue-63116.rs:4:14
3+
|
4+
LL | impl W <s(f;Y(;]
5+
| ^ ^ mismatched closing delimiter
6+
| |
7+
| unclosed delimiter
8+
19
error: this file contains an unclosed delimiter
2-
--> $DIR/issue-63116.rs:3:18
10+
--> $DIR/issue-63116.rs:4:18
311
|
412
LL | impl W <s(f;Y(;]
5-
| - - -^
6-
| | | |
7-
| | | missing open `[` for this delimiter
8-
| | unclosed delimiter before unmatched delimiter
13+
| - ^
14+
| |
915
| unclosed delimiter
1016

11-
error: aborting due to 1 previous error
17+
error: aborting due to 2 previous errors
1218

0 commit comments

Comments
 (0)