Do not suggest adding semicolon/changing delimiters for macros in item position that originates in macros
This commit is contained in:
parent
b31f9cc22b
commit
0ef4098a54
@ -1775,30 +1775,34 @@ impl<'a> Parser<'a> {
|
|||||||
span,
|
span,
|
||||||
"macros that expand to items must be delimited with braces or followed by a semicolon",
|
"macros that expand to items must be delimited with braces or followed by a semicolon",
|
||||||
);
|
);
|
||||||
if self.unclosed_delims.is_empty() {
|
// FIXME: This will make us not emit the help even for declarative
|
||||||
let DelimSpan { open, close } = match args {
|
// macros within the same crate (that we can fix), which is sad.
|
||||||
MacArgs::Empty | MacArgs::Eq(..) => unreachable!(),
|
if !span.from_expansion() {
|
||||||
MacArgs::Delimited(dspan, ..) => *dspan,
|
if self.unclosed_delims.is_empty() {
|
||||||
};
|
let DelimSpan { open, close } = match args {
|
||||||
err.multipart_suggestion(
|
MacArgs::Empty | MacArgs::Eq(..) => unreachable!(),
|
||||||
"change the delimiters to curly braces",
|
MacArgs::Delimited(dspan, ..) => *dspan,
|
||||||
vec![(open, "{".to_string()), (close, '}'.to_string())],
|
};
|
||||||
|
err.multipart_suggestion(
|
||||||
|
"change the delimiters to curly braces",
|
||||||
|
vec![(open, "{".to_string()), (close, '}'.to_string())],
|
||||||
|
Applicability::MaybeIncorrect,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
err.span_suggestion(
|
||||||
|
span,
|
||||||
|
"change the delimiters to curly braces",
|
||||||
|
" { /* items */ }",
|
||||||
|
Applicability::HasPlaceholders,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
err.span_suggestion(
|
||||||
|
span.shrink_to_hi(),
|
||||||
|
"add a semicolon",
|
||||||
|
';',
|
||||||
Applicability::MaybeIncorrect,
|
Applicability::MaybeIncorrect,
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
err.span_suggestion(
|
|
||||||
span,
|
|
||||||
"change the delimiters to curly braces",
|
|
||||||
" { /* items */ }",
|
|
||||||
Applicability::HasPlaceholders,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
err.span_suggestion(
|
|
||||||
span.shrink_to_hi(),
|
|
||||||
"add a semicolon",
|
|
||||||
';',
|
|
||||||
Applicability::MaybeIncorrect,
|
|
||||||
);
|
|
||||||
err.emit();
|
err.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
src/test/ui/proc-macro/auxiliary/issue-91800-macro.rs
Normal file
26
src/test/ui/proc-macro/auxiliary/issue-91800-macro.rs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// force-host
|
||||||
|
// no-prefer-dynamic
|
||||||
|
|
||||||
|
#![crate_type = "proc-macro"]
|
||||||
|
|
||||||
|
extern crate proc_macro;
|
||||||
|
|
||||||
|
use proc_macro::TokenStream;
|
||||||
|
|
||||||
|
fn compile_error() -> TokenStream {
|
||||||
|
r#"compile_error!("")"#.parse().unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[proc_macro_derive(MyTrait)]
|
||||||
|
pub fn derive(input: TokenStream) -> TokenStream {
|
||||||
|
compile_error()
|
||||||
|
}
|
||||||
|
#[proc_macro_attribute]
|
||||||
|
pub fn attribute_macro(_attr: TokenStream, mut input: TokenStream) -> TokenStream {
|
||||||
|
input.extend(compile_error());
|
||||||
|
input
|
||||||
|
}
|
||||||
|
#[proc_macro]
|
||||||
|
pub fn fn_macro(_item: TokenStream) -> TokenStream {
|
||||||
|
compile_error()
|
||||||
|
}
|
16
src/test/ui/proc-macro/issue-91800.rs
Normal file
16
src/test/ui/proc-macro/issue-91800.rs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// aux-build: issue-91800-macro.rs
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate issue_91800_macro;
|
||||||
|
|
||||||
|
#[derive(MyTrait)]
|
||||||
|
//~^ ERROR macros that expand to items must be delimited with braces or followed by a semicolon
|
||||||
|
//~| ERROR proc-macro derive produced unparseable tokens
|
||||||
|
#[attribute_macro]
|
||||||
|
//~^ ERROR macros that expand to items must be delimited with braces or followed by a semicolon
|
||||||
|
struct MyStruct;
|
||||||
|
|
||||||
|
fn_macro! {}
|
||||||
|
//~^ ERROR macros that expand to items must be delimited with braces or followed by a semicolon
|
||||||
|
|
||||||
|
fn main() {}
|
56
src/test/ui/proc-macro/issue-91800.stderr
Normal file
56
src/test/ui/proc-macro/issue-91800.stderr
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
error: macros that expand to items must be delimited with braces or followed by a semicolon
|
||||||
|
--> $DIR/issue-91800.rs:6:10
|
||||||
|
|
|
||||||
|
LL | #[derive(MyTrait)]
|
||||||
|
| ^^^^^^^
|
||||||
|
|
|
||||||
|
= note: this error originates in the derive macro `MyTrait` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
|
error: proc-macro derive produced unparseable tokens
|
||||||
|
--> $DIR/issue-91800.rs:6:10
|
||||||
|
|
|
||||||
|
LL | #[derive(MyTrait)]
|
||||||
|
| ^^^^^^^
|
||||||
|
|
||||||
|
error:
|
||||||
|
--> $DIR/issue-91800.rs:6:10
|
||||||
|
|
|
||||||
|
LL | #[derive(MyTrait)]
|
||||||
|
| ^^^^^^^
|
||||||
|
|
|
||||||
|
= note: this error originates in the derive macro `MyTrait` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
|
error: macros that expand to items must be delimited with braces or followed by a semicolon
|
||||||
|
--> $DIR/issue-91800.rs:9:1
|
||||||
|
|
|
||||||
|
LL | #[attribute_macro]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: this error originates in the attribute macro `attribute_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
|
error:
|
||||||
|
--> $DIR/issue-91800.rs:9:1
|
||||||
|
|
|
||||||
|
LL | #[attribute_macro]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: this error originates in the attribute macro `attribute_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
|
error: macros that expand to items must be delimited with braces or followed by a semicolon
|
||||||
|
--> $DIR/issue-91800.rs:13:1
|
||||||
|
|
|
||||||
|
LL | fn_macro! {}
|
||||||
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: this error originates in the macro `fn_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
|
error:
|
||||||
|
--> $DIR/issue-91800.rs:13:1
|
||||||
|
|
|
||||||
|
LL | fn_macro! {}
|
||||||
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: this error originates in the macro `fn_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
|
error: aborting due to 7 previous errors
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user