Skip to content

Commit dff37db

Browse files
committed
mbe: Refactor the diagnostic for unrecognized metavariable expressions
Change to a structural diagnostic, update the valid list, and move the valid list to a note.
1 parent 93ed397 commit dff37db

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
@@ -154,6 +154,11 @@ expand_mve_missing_paren =
154154
.note = metavariable expressions use function-like parentheses syntax
155155
.suggestion = try adding parentheses
156156
157+
expand_mve_unrecognized_expr =
158+
unrecognized metavariable expression
159+
.label = not a valid metavariable expression
160+
.note = valid metavariable expressions are {$valid_expr_list}
161+
157162
expand_mve_unrecognized_var =
158163
variable `{$key}` is not recognized in meta-variable expression
159164

compiler/rustc_expand/src/errors.rs

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

533+
#[derive(Diagnostic)]
534+
#[note]
535+
#[diag(expand_mve_unrecognized_expr)]
536+
pub(crate) struct MveUnrecognizedExpr {
537+
#[primary_span]
538+
#[label]
539+
pub span: Span,
540+
pub valid_expr_list: &'static str,
541+
}
542+
533543
#[derive(Diagnostic)]
534544
#[diag(expand_mve_unrecognized_var)]
535545
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
@@ -79,15 +79,11 @@ impl MetaVarExpr {
7979
"index" => MetaVarExpr::Index(parse_depth(&mut iter, psess, ident.span)?),
8080
"len" => MetaVarExpr::Len(parse_depth(&mut iter, psess, ident.span)?),
8181
_ => {
82-
let err_msg = "unrecognized meta-variable expression";
83-
let mut err = psess.dcx().struct_span_err(ident.span, err_msg);
84-
err.span_suggestion(
85-
ident.span,
86-
"supported expressions are count, ignore, index and len",
87-
"",
88-
Applicability::MachineApplicable,
89-
);
90-
return Err(err);
82+
let err = errors::MveUnrecognizedExpr {
83+
span: ident.span,
84+
valid_expr_list: "`count`, `ignore`, `index`, `len`, and `concat`",
85+
};
86+
return Err(psess.dcx().create_err(err));
9187
}
9288
};
9389
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
@@ -118,7 +118,7 @@ macro_rules! unknown_ignore_ident {
118118

119119
macro_rules! unknown_metavar {
120120
( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
121-
//~^ ERROR unrecognized meta-variable expression
121+
//~^ ERROR unrecognized metavariable expression
122122
}
123123

124124
fn main() {}

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

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

195-
error: unrecognized meta-variable expression
195+
error: unrecognized metavariable expression
196196
--> $DIR/syntax-errors.rs:120:33
197197
|
198198
LL | ( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
199-
| ^^^^^^^^^^^^^^ help: supported expressions are count, ignore, index and len
199+
| ^^^^^^^^^^^^^^ not a valid metavariable expression
200+
|
201+
= note: valid metavariable expressions are `count`, `ignore`, `index`, `len`, and `concat`
200202

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

0 commit comments

Comments
 (0)