mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 07:44:10 +00:00
Modify invalid macro in expression context diagnostic
This commit is contained in:
parent
8544db0faa
commit
ad144ac3c1
@ -1036,10 +1036,26 @@ impl<'a> Parser<'a> {
|
||||
// Avoid emitting backtrace info twice.
|
||||
let def_site_span = self.span.with_ctxt(SyntaxContext::empty());
|
||||
let mut err = self.diagnostic().struct_span_err(def_site_span, &msg);
|
||||
let msg = format!("caused by the macro expansion here; the usage \
|
||||
of `{}!` is likely invalid in {} context",
|
||||
macro_path, kind_name);
|
||||
err.span_note(span, &msg).emit();
|
||||
err.span_label(span, "caused by the macro expansion here");
|
||||
let msg = format!(
|
||||
"the usage of `{}!` is likely invalid in {} context",
|
||||
macro_path,
|
||||
kind_name,
|
||||
);
|
||||
err.note(&msg);
|
||||
let semi_span = self.sess.source_map().next_point(span);
|
||||
match self.sess.source_map().span_to_snippet(semi_span) {
|
||||
Ok(ref snippet) if &snippet[..] != ";" && kind_name == "expression" => {
|
||||
err.span_suggestion_with_applicability(
|
||||
semi_span,
|
||||
"you might be missing a semicolon here",
|
||||
";".to_owned(),
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
err.emit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,12 +3,11 @@ error: macro expansion ignores token `;` and any following
|
||||
|
|
||||
LL | () => ( String ; ); //~ ERROR macro expansion ignores token `;`
|
||||
| ^
|
||||
|
|
||||
note: caused by the macro expansion here; the usage of `t!` is likely invalid in type context
|
||||
--> $DIR/issue-30007.rs:16:16
|
||||
|
|
||||
...
|
||||
LL | let i: Vec<t!()>;
|
||||
| ^^^^
|
||||
| ---- caused by the macro expansion here
|
||||
|
|
||||
= note: the usage of `t!` is likely invalid in type context
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -3,36 +3,35 @@ error: macro expansion ignores token `;` and any following
|
||||
|
|
||||
LL | () => ( i ; typeof ); //~ ERROR expected expression, found reserved keyword `typeof`
|
||||
| ^
|
||||
|
|
||||
note: caused by the macro expansion here; the usage of `m!` is likely invalid in type context
|
||||
--> $DIR/macro-context.rs:20:12
|
||||
|
|
||||
...
|
||||
LL | let a: m!();
|
||||
| ^^^^
|
||||
| ---- caused by the macro expansion here
|
||||
|
|
||||
= note: the usage of `m!` is likely invalid in type context
|
||||
|
||||
error: macro expansion ignores token `typeof` and any following
|
||||
--> $DIR/macro-context.rs:13:17
|
||||
|
|
||||
LL | () => ( i ; typeof ); //~ ERROR expected expression, found reserved keyword `typeof`
|
||||
| ^^^^^^
|
||||
|
|
||||
note: caused by the macro expansion here; the usage of `m!` is likely invalid in expression context
|
||||
--> $DIR/macro-context.rs:21:13
|
||||
|
|
||||
...
|
||||
LL | let i = m!();
|
||||
| ^^^^
|
||||
| ----- help: you might be missing a semicolon here: `;`
|
||||
| |
|
||||
| caused by the macro expansion here
|
||||
|
|
||||
= note: the usage of `m!` is likely invalid in expression context
|
||||
|
||||
error: macro expansion ignores token `;` and any following
|
||||
--> $DIR/macro-context.rs:13:15
|
||||
|
|
||||
LL | () => ( i ; typeof ); //~ ERROR expected expression, found reserved keyword `typeof`
|
||||
| ^
|
||||
|
|
||||
note: caused by the macro expansion here; the usage of `m!` is likely invalid in pattern context
|
||||
--> $DIR/macro-context.rs:23:9
|
||||
|
|
||||
...
|
||||
LL | m!() => {}
|
||||
| ^^^^
|
||||
| ---- caused by the macro expansion here
|
||||
|
|
||||
= note: the usage of `m!` is likely invalid in pattern context
|
||||
|
||||
error: expected expression, found reserved keyword `typeof`
|
||||
--> $DIR/macro-context.rs:13:17
|
||||
|
15
src/test/ui/macros/macro-in-expression-context.fixed
Normal file
15
src/test/ui/macros/macro-in-expression-context.fixed
Normal file
@ -0,0 +1,15 @@
|
||||
// run-rustfix
|
||||
|
||||
macro_rules! foo {
|
||||
() => {
|
||||
assert_eq!("A", "A");
|
||||
assert_eq!("B", "B");
|
||||
}
|
||||
//~^^ ERROR macro expansion ignores token `assert_eq` and any following
|
||||
//~| NOTE the usage of `foo!` is likely invalid in expression context
|
||||
}
|
||||
|
||||
fn main() {
|
||||
foo!();
|
||||
//~^ NOTE caused by the macro expansion here
|
||||
}
|
15
src/test/ui/macros/macro-in-expression-context.rs
Normal file
15
src/test/ui/macros/macro-in-expression-context.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// run-rustfix
|
||||
|
||||
macro_rules! foo {
|
||||
() => {
|
||||
assert_eq!("A", "A");
|
||||
assert_eq!("B", "B");
|
||||
}
|
||||
//~^^ ERROR macro expansion ignores token `assert_eq` and any following
|
||||
//~| NOTE the usage of `foo!` is likely invalid in expression context
|
||||
}
|
||||
|
||||
fn main() {
|
||||
foo!()
|
||||
//~^ NOTE caused by the macro expansion here
|
||||
}
|
15
src/test/ui/macros/macro-in-expression-context.stderr
Normal file
15
src/test/ui/macros/macro-in-expression-context.stderr
Normal file
@ -0,0 +1,15 @@
|
||||
error: macro expansion ignores token `assert_eq` and any following
|
||||
--> $DIR/macro-in-expression-context.rs:6:9
|
||||
|
|
||||
LL | assert_eq!("B", "B");
|
||||
| ^^^^^^^^^
|
||||
...
|
||||
LL | foo!()
|
||||
| ------- help: you might be missing a semicolon here: `;`
|
||||
| |
|
||||
| caused by the macro expansion here
|
||||
|
|
||||
= note: the usage of `foo!` is likely invalid in expression context
|
||||
|
||||
error: aborting due to previous error
|
||||
|
@ -3,12 +3,11 @@ error: macro expansion ignores token `,` and any following
|
||||
|
|
||||
LL | , //~ ERROR macro expansion ignores token `,`
|
||||
| ^
|
||||
|
|
||||
note: caused by the macro expansion here; the usage of `ignored_item!` is likely invalid in item context
|
||||
--> $DIR/macro-incomplete-parse.rs:31:1
|
||||
|
|
||||
...
|
||||
LL | ignored_item!();
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
| ---------------- caused by the macro expansion here
|
||||
|
|
||||
= note: the usage of `ignored_item!` is likely invalid in item context
|
||||
|
||||
error: expected one of `.`, `;`, `?`, `}`, or an operator, found `,`
|
||||
--> $DIR/macro-incomplete-parse.rs:22:14
|
||||
@ -24,12 +23,11 @@ error: macro expansion ignores token `,` and any following
|
||||
|
|
||||
LL | () => ( 1, 2 ) //~ ERROR macro expansion ignores token `,`
|
||||
| ^
|
||||
|
|
||||
note: caused by the macro expansion here; the usage of `ignored_pat!` is likely invalid in pattern context
|
||||
--> $DIR/macro-incomplete-parse.rs:36:9
|
||||
|
|
||||
...
|
||||
LL | ignored_pat!() => (),
|
||||
| ^^^^^^^^^^^^^^
|
||||
| -------------- caused by the macro expansion here
|
||||
|
|
||||
= note: the usage of `ignored_pat!` is likely invalid in pattern context
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user