about summary refs log tree commit diff
path: root/src/libsyntax_ext
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-03-03 19:04:58 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-03-16 23:13:15 +0300
commit5cb5083909f19c107aec186a72b8b9104f8ca30d (patch)
tree2043de231487b0b5275dc39af3732ec6f471ef8d /src/libsyntax_ext
parent8371caf5ee13e775d2b2dc64c9b08e37dab49eda (diff)
downloadrust-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.rs18
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 {