Skip to content

Commit 57cc78b

Browse files
committed
combine mismatched closing and missing open into one line
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
1 parent 26d94f4 commit 57cc78b

26 files changed

+61
-124
lines changed

compiler/rustc_parse/messages.ftl

+1-1
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ parse_meta_bad_delim = wrong meta list delimiters
553553
parse_meta_bad_delim_suggestion = the delimiters should be `(` and `)`
554554
555555
parse_mismatched_closing_delimiter = mismatched closing delimiter: `{$delimiter}`
556-
.label_unmatched = mismatched closing delimiter
556+
.label_unmatched = mismatched closing delimiter{$missing_open_note}
557557
.label_opening_candidate = closing delimiter possibly meant for this
558558
.label_unclosed = unclosed delimiter
559559

compiler/rustc_parse/src/errors.rs

+1
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,7 @@ pub(crate) struct MismatchedClosingDelimiter {
947947
pub delimiter: String,
948948
#[label(parse_label_unmatched)]
949949
pub unmatched: Span,
950+
pub missing_open_note: String,
950951
#[label(parse_label_opening_candidate)]
951952
pub opening_candidate: Option<Span>,
952953
#[label(parse_label_unclosed)]

compiler/rustc_parse/src/lexer/diagnostics.rs

+18-20
Original file line numberDiff line numberDiff line change
@@ -73,38 +73,36 @@ pub(crate) fn make_unclosed_delims_error(
7373
if let Some(sp) = unmatched.unclosed_span {
7474
spans.push(sp);
7575
};
76-
let mut err = psess.dcx().create_err(MismatchedClosingDelimiter {
76+
77+
let missing_open_note = report_missing_open_delim(&unmatched)
78+
.map(|s| format!(", may missing open `{s}`"))
79+
.unwrap_or_default();
80+
81+
let err = psess.dcx().create_err(MismatchedClosingDelimiter {
7782
spans,
7883
delimiter: pprust::token_kind_to_string(&token::CloseDelim(found_delim)).to_string(),
7984
unmatched: unmatched.found_span,
85+
missing_open_note,
8086
opening_candidate: unmatched.candidate_span,
8187
unclosed: unmatched.unclosed_span,
8288
});
83-
report_missing_open_delim(&mut err, &[unmatched]);
8489
Some(err)
8590
}
8691

8792
// When we get a `)` or `]` for `{`, we should emit help message here
8893
// it's more friendly compared to report `unmatched error` in later phase
89-
fn report_missing_open_delim(err: &mut Diag<'_>, unmatched_delims: &[UnmatchedDelim]) -> bool {
90-
let mut reported_missing_open = false;
91-
for unmatch_brace in unmatched_delims.iter() {
92-
if let Some(delim) = unmatch_brace.found_delim
93-
&& matches!(delim, Delimiter::Parenthesis | Delimiter::Bracket)
94-
{
95-
let missed_open = match delim {
96-
Delimiter::Parenthesis => "(",
97-
Delimiter::Bracket => "[",
98-
_ => unreachable!(),
99-
};
100-
err.span_label(
101-
unmatch_brace.found_span.shrink_to_lo(),
102-
format!("missing open `{missed_open}` for this delimiter"),
103-
);
104-
reported_missing_open = true;
105-
}
94+
fn report_missing_open_delim(unmatched_delim: &UnmatchedDelim) -> Option<String> {
95+
if let Some(delim) = unmatched_delim.found_delim
96+
&& matches!(delim, Delimiter::Parenthesis | Delimiter::Bracket)
97+
{
98+
let missed_open = match delim {
99+
Delimiter::Parenthesis => "(",
100+
Delimiter::Bracket => "[",
101+
_ => unreachable!(),
102+
};
103+
return Some(missed_open.to_owned());
106104
}
107-
reported_missing_open
105+
None
108106
}
109107

110108
pub(super) fn report_suspicious_mismatch_block(

tests/ui/attributes/z-crate-attr/unbalanced-paren.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ error: mismatched closing delimiter: `]`
22
--> <crate attribute>:1:4
33
|
44
LL | #![(]
5-
| -^^ mismatched closing delimiter
5+
| -^^ mismatched closing delimiter, may missing open `[`
66
| ||
77
| |unclosed delimiter
88
| closing delimiter possibly meant for this

tests/ui/macros/issue-102878.stderr

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ error: mismatched closing delimiter: `)`
22
--> $DIR/issue-102878.rs:1:35
33
|
44
LL | macro_rules!test{($l:expr,$_:r)=>({const:y y)}
5-
| -^ ^
6-
| || |
7-
| || mismatched closing delimiter
8-
| || missing open `(` for this delimiter
5+
| -^ ^ mismatched closing delimiter, may missing open `(`
6+
| ||
97
| |unclosed delimiter
108
| closing delimiter possibly meant for this
119

tests/ui/parser/deli-ident-issue-2.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ error: mismatched closing delimiter: `]`
44
LL | if 1 < 2 {
55
| ^ unclosed delimiter
66
LL | let _a = vec!];
7-
| ^
8-
| |
9-
| mismatched closing delimiter
10-
| missing open `[` for this delimiter
7+
| ^ mismatched closing delimiter, may missing open `[`
118

129
error: aborting due to 1 previous error
1310

tests/ui/parser/do-not-suggest-semicolon-before-array.stderr

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ error: mismatched closing delimiter: `)`
22
--> $DIR/do-not-suggest-semicolon-before-array.rs:5:5
33
|
44
LL | [1, 3)
5-
| ^ ^
6-
| | |
7-
| | mismatched closing delimiter
8-
| | missing open `(` for this delimiter
5+
| ^ ^ mismatched closing delimiter, may missing open `(`
6+
| |
97
| unclosed delimiter
108

119
error: aborting due to 1 previous error

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ error: mismatched closing delimiter: `)`
22
--> $DIR/issue-104367.rs:5:15
33
|
44
LL | #![w,)
5-
| ^ ^
6-
| | |
7-
| | mismatched closing delimiter
8-
| | missing open `(` for this delimiter
5+
| ^ ^ mismatched closing delimiter, may missing open `(`
6+
| |
97
| unclosed delimiter
108

119
error: this file contains an unclosed delimiter

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ error: mismatched closing delimiter: `)`
22
--> $DIR/issue-105209.rs:2:11
33
|
44
LL | #![c={#![c[)x
5-
| ^^
6-
| ||
7-
| |mismatched closing delimiter
8-
| |missing open `(` for this delimiter
5+
| ^^ mismatched closing delimiter, may missing open `(`
6+
| |
97
| unclosed delimiter
108

119
error: this file contains an unclosed delimiter

tests/ui/parser/issues/issue-10636-1.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ struct Obj {
33
member: usize
44
)
55
//~^ ERROR mismatched closing delimiter
6-
//~| NOTE mismatched closing delimiter
7-
//~| NOTE missing open `(` for this delimiter
6+
//~| NOTE mismatched closing delimiter, may missing open `(`
87

98
fn main() {}

tests/ui/parser/issues/issue-10636-1.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ LL | struct Obj {
55
| ^ unclosed delimiter
66
...
77
LL | )
8-
| ^
9-
| |
10-
| mismatched closing delimiter
11-
| missing open `(` for this delimiter
8+
| ^ mismatched closing delimiter, may missing open `(`
129

1310
error: aborting due to 1 previous error
1411

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

+1-4
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ LL | fn qux() -> Option<usize> {
55
| ^ unclosed delimiter
66
LL | let _ = if true {
77
LL | });
8-
| ^
9-
| |
10-
| mismatched closing delimiter
11-
| missing open `(` for this delimiter
8+
| ^ mismatched closing delimiter, may missing open `(`
129

1310
error: aborting due to 1 previous error
1411

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

+2-8
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ LL | mod _ {
55
| ^ unclosed delimiter
66
LL | pub g() -> is
77
LL | (), w20);
8-
| ^
9-
| |
10-
| mismatched closing delimiter
11-
| missing open `(` for this delimiter
8+
| ^ mismatched closing delimiter, may missing open `(`
129

1310
error: mismatched closing delimiter: `)`
1411
--> $DIR/issue-62895.rs:4:7
@@ -17,10 +14,7 @@ LL | mod _ {
1714
| ^ unclosed delimiter
1815
...
1916
LL | (), w20);
20-
| ^
21-
| |
22-
| mismatched closing delimiter
23-
| missing open `(` for this delimiter
17+
| ^ mismatched closing delimiter, may missing open `(`
2418

2519
error: aborting due to 2 previous errors
2620

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

+4-8
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@ error: mismatched closing delimiter: `)`
22
--> $DIR/issue-62973.rs:8:27
33
|
44
LL | fn p() { match s { v, E { [) {) }
5-
| ^^
6-
| ||
7-
| |mismatched closing delimiter
8-
| |missing open `(` for this delimiter
5+
| ^^ mismatched closing delimiter, may missing open `(`
6+
| |
97
| unclosed delimiter
108

119
error: mismatched closing delimiter: `)`
1210
--> $DIR/issue-62973.rs:8:30
1311
|
1412
LL | fn p() { match s { v, E { [) {) }
15-
| ^^
16-
| ||
17-
| |mismatched closing delimiter
18-
| |missing open `(` for this delimiter
13+
| ^^ mismatched closing delimiter, may missing open `(`
14+
| |
1915
| unclosed delimiter
2016

2117
error: this file contains an unclosed delimiter

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ error: mismatched closing delimiter: `]`
22
--> $DIR/issue-63116.rs:4:14
33
|
44
LL | impl W <s(f;Y(;]
5-
| ^ ^
6-
| | |
7-
| | mismatched closing delimiter
8-
| | missing open `[` for this delimiter
5+
| ^ ^ mismatched closing delimiter, may missing open `[`
6+
| |
97
| unclosed delimiter
108

119
error: this file contains an unclosed delimiter

tests/ui/parser/issues/issue-67377-invalid-syntax-in-enum-discriminant.stderr

+6-12
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,26 @@ error: mismatched closing delimiter: `]`
22
--> $DIR/issue-67377-invalid-syntax-in-enum-discriminant.rs:5:27
33
|
44
LL | V = [PhantomData; { [ () ].len() ].len() as isize,
5-
| - ^ ^
6-
| | | |
7-
| | | mismatched closing delimiter
8-
| | | missing open `[` for this delimiter
5+
| - ^ ^ mismatched closing delimiter, may missing open `[`
6+
| | |
97
| | unclosed delimiter
108
| closing delimiter possibly meant for this
119

1210
error: mismatched closing delimiter: `]`
1311
--> $DIR/issue-67377-invalid-syntax-in-enum-discriminant.rs:12:24
1412
|
1513
LL | V = [Vec::new; { [].len() ].len() as isize,
16-
| - ^ ^
17-
| | | |
18-
| | | mismatched closing delimiter
19-
| | | missing open `[` for this delimiter
14+
| - ^ ^ mismatched closing delimiter, may missing open `[`
15+
| | |
2016
| | unclosed delimiter
2117
| closing delimiter possibly meant for this
2218

2319
error: mismatched closing delimiter: `]`
2420
--> $DIR/issue-67377-invalid-syntax-in-enum-discriminant.rs:19:24
2521
|
2622
LL | V = [Vec::new; { [0].len() ].len() as isize,
27-
| - ^ ^
28-
| | | |
29-
| | | mismatched closing delimiter
30-
| | | missing open `[` for this delimiter
23+
| - ^ ^ mismatched closing delimiter, may missing open `[`
24+
| | |
3125
| | unclosed delimiter
3226
| closing delimiter possibly meant for this
3327

tests/ui/parser/issues/issue-68987-unmatch-issue-2.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ error: mismatched closing delimiter: `)`
44
LL | async fn obstest() -> Result<> {
55
| ^ unclosed delimiter
66
LL | let obs_connect = || -> Result<(), MyError) {
7-
| ^
8-
| |
9-
| mismatched closing delimiter
10-
| missing open `(` for this delimiter
7+
| ^ mismatched closing delimiter, may missing open `(`
118

129
error: aborting due to 1 previous error
1310

tests/ui/parser/issues/issue-68987-unmatch-issue-3.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ error: mismatched closing delimiter: `)`
44
LL | while cnt < j {
55
| ^ unclosed delimiter
66
LL | write!&mut res, " ");
7-
| ^
8-
| |
9-
| mismatched closing delimiter
10-
| missing open `(` for this delimiter
7+
| ^ mismatched closing delimiter, may missing open `(`
118

129
error: aborting due to 1 previous error
1310

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ error: mismatched closing delimiter: `]`
22
--> $DIR/issue-81827.rs:7:23
33
|
44
LL | fn r()->i{0|{#[cfg(r(0{]0
5-
| - ^^
6-
| | ||
7-
| | |mismatched closing delimiter
8-
| | |missing open `[` for this delimiter
5+
| - ^^ mismatched closing delimiter, may missing open `[`
6+
| | |
97
| | unclosed delimiter
108
| closing delimiter possibly meant for this
119

tests/ui/parser/issues/unnessary-error-issue-138401.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ error: mismatched closing delimiter: `)`
44
LL | pub fn foo(x: i64) -> i64 {
55
| ^ unclosed delimiter
66
LL | x.abs)
7-
| ^
8-
| |
9-
| mismatched closing delimiter
10-
| missing open `(` for this delimiter
7+
| ^ mismatched closing delimiter, may missing open `(`
118

129
error: aborting due to 1 previous error
1310

tests/ui/parser/macro-mismatched-delim-brace-paren.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ LL | foo! {
55
| ^ unclosed delimiter
66
LL | bar, "baz", 1, 2.0
77
LL | )
8-
| ^
9-
| |
10-
| mismatched closing delimiter
11-
| missing open `(` for this delimiter
8+
| ^ mismatched closing delimiter, may missing open `(`
129

1310
error: aborting due to 1 previous error
1411

tests/ui/parser/parser-recovery-2.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ LL | fn bar() {
55
| ^ unclosed delimiter
66
LL | let x = foo();
77
LL | )
8-
| ^
9-
| |
10-
| mismatched closing delimiter
11-
| missing open `(` for this delimiter
8+
| ^ mismatched closing delimiter, may missing open `(`
129

1310
error: aborting due to 1 previous error
1411

tests/ui/resolve/token-error-correct-2.stderr

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ error: mismatched closing delimiter: `)`
44
LL | if foo {
55
| ^ unclosed delimiter
66
LL | )
7-
| ^
8-
| |
9-
| mismatched closing delimiter
10-
| missing open `(` for this delimiter
7+
| ^ mismatched closing delimiter, may missing open `(`
118

129
error: aborting due to 1 previous error
1310

tests/ui/suggestions/issue-94171.stderr

+2-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@ error: mismatched closing delimiter: `]`
1414
--> $DIR/issue-94171.rs:1:5
1515
|
1616
LL | fn L(]{match
17-
| ^^
18-
| ||
19-
| |mismatched closing delimiter
20-
| |missing open `[` for this delimiter
17+
| ^^ mismatched closing delimiter, may missing open `[`
18+
| |
2119
| unclosed delimiter
2220

2321
error: this file contains an unclosed delimiter

tests/ui/typeck/issue-91334.stderr

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ error: mismatched closing delimiter: `)`
22
--> $DIR/issue-91334.rs:7:19
33
|
44
LL | fn f(){||yield(((){),
5-
| - ^^
6-
| | ||
7-
| | |mismatched closing delimiter
8-
| | |missing open `(` for this delimiter
5+
| - ^^ mismatched closing delimiter, may missing open `(`
6+
| | |
97
| | unclosed delimiter
108
| closing delimiter possibly meant for this
119

0 commit comments

Comments
 (0)