Skip to content

Commit 1146773

Browse files
committed
mbe: Refactor the diagnostic for unrecognized metavariable expressions
1 parent 173d3dc commit 1146773

File tree

5 files changed

+25
-12
lines changed

5 files changed

+25
-12
lines changed

compiler/rustc_expand/messages.ftl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,11 @@ expand_mve_missing_paren =
152152
.note = metavariable expressions use function-like parentheses syntax
153153
.suggestion = try adding parentheses
154154
155+
expand_mve_unrecognized_expr =
156+
unrecognized metavariable expression
157+
.label = not a valid metavariable expression
158+
.note = valid metavariable expressions are {$valid_expr_list}
159+
155160
expand_mve_unrecognized_var =
156161
variable `{$key}` is not recognized in meta-variable expression
157162

compiler/rustc_expand/src/errors.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,16 @@ mod metavar_exprs {
528528
pub insert_span: Option<Span>,
529529
}
530530

531+
#[derive(Diagnostic)]
532+
#[note]
533+
#[diag(expand_mve_unrecognized_expr)]
534+
pub(crate) struct MveUnrecognizedExpr {
535+
#[primary_span]
536+
#[label]
537+
pub span: Span,
538+
pub valid_expr_list: &'static str,
539+
}
540+
531541
#[derive(Diagnostic)]
532542
#[diag(expand_mve_unrecognized_var)]
533543
pub(crate) struct MveUnrecognizedVar {

compiler/rustc_expand/src/mbe/metavar_expr.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,11 @@ impl MetaVarExpr {
8181
"index" => MetaVarExpr::Index(parse_depth(&mut iter, psess, ident.span)?),
8282
"len" => MetaVarExpr::Len(parse_depth(&mut iter, psess, ident.span)?),
8383
_ => {
84-
let err_msg = "unrecognized meta-variable expression";
85-
let mut err = psess.dcx().struct_span_err(ident.span, err_msg);
86-
err.span_suggestion(
87-
ident.span,
88-
"supported expressions are count, ignore, index and len",
89-
"",
90-
Applicability::MachineApplicable,
91-
);
92-
return Err(err);
84+
let err = errors::MveUnrecognizedExpr {
85+
span: ident.span,
86+
valid_expr_list: VALID_METAVAR_EXPR_NAMES,
87+
};
88+
return Err(psess.dcx().create_err(err));
9389
}
9490
};
9591
check_trailing_tokens(&mut iter, psess, ident)?;

tests/ui/macros/metavar-expressions/syntax-errors.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ macro_rules! unknown_ignore_ident {
111111

112112
macro_rules! unknown_metavar {
113113
( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
114-
//~^ ERROR unrecognized meta-variable expression
114+
//~^ ERROR unrecognized metavariable expression
115115
}
116116

117117
fn main() {}

tests/ui/macros/metavar-expressions/syntax-errors.stderr

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,13 @@ error: meta-variables within meta-variable expressions must be referenced using
160160
LL | ${ignore(bar)}
161161
| ^^^^^^
162162

163-
error: unrecognized meta-variable expression
163+
error: unrecognized metavariable expression
164164
--> $DIR/syntax-errors.rs:113:33
165165
|
166166
LL | ( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
167-
| ^^^^^^^^^^^^^^ help: supported expressions are count, ignore, index and len
167+
| ^^^^^^^^^^^^^^ not a valid metavariable expression
168+
|
169+
= note: valid metavariable expressions are `count`, `ignore`, `index`, `len`, and `concat`
168170

169171
error: expected identifier or string literal
170172
--> $DIR/syntax-errors.rs:38:14

0 commit comments

Comments
 (0)