diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-03-03 19:04:58 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-03-16 23:13:15 +0300 |
| commit | 5cb5083909f19c107aec186a72b8b9104f8ca30d (patch) | |
| tree | 2043de231487b0b5275dc39af3732ec6f471ef8d /src/libsyntax_ext | |
| parent | 8371caf5ee13e775d2b2dc64c9b08e37dab49eda (diff) | |
| download | rust-5cb5083909f19c107aec186a72b8b9104f8ca30d.tar.gz rust-5cb5083909f19c107aec186a72b8b9104f8ca30d.zip | |
syntax_ext: Validate `#[proc_macro_derive]` input better
Tweak some error wording
Diffstat (limited to 'src/libsyntax_ext')
| -rw-r--r-- | src/libsyntax_ext/proc_macro_decls.rs | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/libsyntax_ext/proc_macro_decls.rs b/src/libsyntax_ext/proc_macro_decls.rs index 4cd42d6d755..efa6ce56648 100644 --- a/src/libsyntax_ext/proc_macro_decls.rs +++ b/src/libsyntax_ext/proc_macro_decls.rs @@ -128,9 +128,13 @@ impl<'a> CollectProcMacros<'a> { } }; + if trait_ident.is_path_segment_keyword() { + self.handler.span_err(trait_attr.span(), + &format!("`{}` cannot be a name of derive macro", trait_ident)); + } if deriving::is_builtin_trait(trait_ident.name) { self.handler.span_err(trait_attr.span, - "cannot override a built-in #[derive] mode"); + "cannot override a built-in derive macro"); } let attributes_attr = list.get(1); @@ -140,8 +144,7 @@ impl<'a> CollectProcMacros<'a> { } attr.meta_item_list().unwrap_or_else(|| { self.handler.span_err(attr.span(), - "attribute must be of form: \ - `attributes(foo, bar)`"); + "attribute must be of form: `attributes(foo, bar)`"); &[] }).into_iter().filter_map(|attr| { let attr = match attr.meta_item() { @@ -149,7 +152,7 @@ impl<'a> CollectProcMacros<'a> { _ => { self.handler.span_err(attr.span(), "not a meta item"); return None; - }, + } }; let ident = match attr.ident() { @@ -159,6 +162,13 @@ impl<'a> CollectProcMacros<'a> { return None; } }; + if ident.is_path_segment_keyword() { + self.handler.span_err( + attr.span(), + &format!("`{}` cannot be a name of derive helper attribute", ident), + ); + } + Some(ident.name) }).collect() } else { |
