Skip to content

Commit

Permalink
Rollup merge of #69522 - Centril:fix-69341, r=petrochenkov
Browse files Browse the repository at this point in the history
error_derive_forbidden_on_non_adt: be more graceful

Fixes #69341 which was injected by #67052.

r? @petrochenkov
  • Loading branch information
Centril committed Feb 28, 2020
2 parents 07d9ed2 + 13d42f4 commit 87cc521
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 4 deletions.
7 changes: 3 additions & 4 deletions src/librustc_expand/expand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -503,13 +503,12 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
}

fn error_derive_forbidden_on_non_adt(&self, derives: &[Path], item: &Annotatable) {
let attr =
attr::find_by_name(item.attrs(), sym::derive).expect("`derive` attribute should exist");
let span = attr.span;
let attr = attr::find_by_name(item.attrs(), sym::derive);
let span = attr.map_or(item.span(), |attr| attr.span);
let mut err = self
.cx
.struct_span_err(span, "`derive` may only be applied to structs, enums and unions");
if let ast::AttrStyle::Inner = attr.style {
if let Some(ast::Attribute { style: ast::AttrStyle::Inner, .. }) = attr {
let trait_list = derives.iter().map(|t| pprust::path_to_string(t)).collect::<Vec<_>>();
let suggestion = format!("#[derive({})]", trait_list.join(", "));
err.span_suggestion(
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/malformed/issue-69341-malformed-derive-inert.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
fn main() {}

struct CLI {
#[derive(parse())]
//~^ ERROR traits in `#[derive(...)]` don't accept arguments
//~| ERROR cannot find derive macro `parse` in this scope
//~| ERROR cannot find derive macro `parse` in this scope
path: (),
//~^ ERROR `derive` may only be applied to structs, enums and unions
}
26 changes: 26 additions & 0 deletions src/test/ui/malformed/issue-69341-malformed-derive-inert.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
error: traits in `#[derive(...)]` don't accept arguments
--> $DIR/issue-69341-malformed-derive-inert.rs:4:19
|
LL | #[derive(parse())]
| ^^ help: remove the arguments

error: `derive` may only be applied to structs, enums and unions
--> $DIR/issue-69341-malformed-derive-inert.rs:8:5
|
LL | path: (),
| ^^^^^^^^

error: cannot find derive macro `parse` in this scope
--> $DIR/issue-69341-malformed-derive-inert.rs:4:14
|
LL | #[derive(parse())]
| ^^^^^

error: cannot find derive macro `parse` in this scope
--> $DIR/issue-69341-malformed-derive-inert.rs:4:14
|
LL | #[derive(parse())]
| ^^^^^

error: aborting due to 4 previous errors

0 comments on commit 87cc521

Please sign in to comment.