Skip to content

Commit 6f81ed3

Browse files
committed
mbe: Refactor the diagnostic for unrecognized metavariable expressions
1 parent 17f5a09 commit 6f81ed3

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
@@ -160,6 +160,11 @@ expand_mve_missing_paren =
160160
.note = metavariable expressions use function-like parentheses syntax
161161
.suggestion = try adding parentheses
162162

163+
expand_mve_unrecognized_expr =
164+
unrecognized metavariable expression
165+
.label = not a valid metavariable expression
166+
.note = valid metavariable expressions are {$valid_expr_list}
167+
163168
expand_mve_unrecognized_var =
164169
variable `{$key}` is not recognized in meta-variable expression
165170

compiler/rustc_expand/src/errors.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,16 @@ mod metavar_exprs {
553553
pub insert_span: Option<Span>,
554554
}
555555

556+
#[derive(Diagnostic)]
557+
#[note]
558+
#[diag(expand_mve_unrecognized_expr)]
559+
pub(crate) struct MveUnrecognizedExpr {
560+
#[primary_span]
561+
#[label]
562+
pub span: Span,
563+
pub valid_expr_list: &'static str,
564+
}
565+
556566
#[derive(Diagnostic)]
557567
#[diag(expand_mve_unrecognized_var)]
558568
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
@@ -92,15 +92,11 @@ impl MetaVarExpr {
9292
"index" => MetaVarExpr::Index(parse_depth(&mut iter, psess, ident.span)?),
9393
"len" => MetaVarExpr::Len(parse_depth(&mut iter, psess, ident.span)?),
9494
_ => {
95-
let err_msg = "unrecognized meta-variable expression";
96-
let mut err = psess.dcx().struct_span_err(ident.span, err_msg);
97-
err.span_suggestion(
98-
ident.span,
99-
"supported expressions are count, ignore, index and len",
100-
"",
101-
Applicability::MachineApplicable,
102-
);
103-
return Err(err);
95+
let err = errors::MveUnrecognizedExpr {
96+
span: ident.span,
97+
valid_expr_list: VALID_METAVAR_EXPR_NAMES,
98+
};
99+
return Err(psess.dcx().create_err(err));
104100
}
105101
};
106102
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
@@ -162,11 +162,13 @@ error: meta-variables within meta-variable expressions must be referenced using
162162
LL | ${ignore(bar)}
163163
| ^^^^^^
164164

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

171173
error: expected an identifier
172174
--> $DIR/syntax-errors.rs:38:14

0 commit comments

Comments
 (0)