Modify invalid macro in expression context diagnostic

This commit is contained in:
Esteban Küber 2018-10-23 10:07:34 -07:00
parent 8544db0faa
commit ad144ac3c1
7 changed files with 91 additions and 34 deletions

View File

@ -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();
}
}
}

View File

@ -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

View File

@ -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

View 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
}

View 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
}

View 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

View File

@ -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