Skip to content

Commit 4d7b7ed

Browse files
committed
combine mismatched closing and missing open into one line
Signed-off-by: xizheyin <[email protected]>
1 parent 3c1d25a commit 4d7b7ed

26 files changed

+61
-124
lines changed

compiler/rustc_parse/messages.ftl

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,7 @@ pub(crate) struct MismatchedClosingDelimiter {
945945
pub delimiter: String,
946946
#[label(parse_label_unmatched)]
947947
pub unmatched: Span,
948+
pub missing_open_note: String,
948949
#[label(parse_label_opening_candidate)]
949950
pub opening_candidate: Option<Span>,
950951
#[label(parse_label_unclosed)]

compiler/rustc_parse/src/lexer/diagnostics.rs

Lines changed: 18 additions & 20 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 4 deletions
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

Lines changed: 1 addition & 4 deletions
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

Lines changed: 2 additions & 4 deletions
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

Lines changed: 2 additions & 4 deletions
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

Lines changed: 2 additions & 4 deletions
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

Lines changed: 1 addition & 2 deletions
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() {}

0 commit comments

Comments
 (0)