about summary refs log tree commit diff
path: root/src/librustc_plugin
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-12-22 06:03:19 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-12-23 05:49:34 +0000
commitc12fc66a9d643a6942d0bf4175d1a046e8d808de (patch)
treea0b9495755b4ffbcc95f2d8b603b7ee355873166 /src/librustc_plugin
parent164619a8cfe6d376d25bd3a6a9a5f2856c8de64d (diff)
downloadrust-c12fc66a9d643a6942d0bf4175d1a046e8d808de.tar.gz
rust-c12fc66a9d643a6942d0bf4175d1a046e8d808de.zip
Allow legacy custom derive authors to disable warnings in downstream crates.
Diffstat (limited to 'src/librustc_plugin')
-rw-r--r--src/librustc_plugin/registry.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/librustc_plugin/registry.rs b/src/librustc_plugin/registry.rs
index fe2f9713d1b..3700d0295e9 100644
--- a/src/librustc_plugin/registry.rs
+++ b/src/librustc_plugin/registry.rs
@@ -64,6 +64,8 @@ pub struct Registry<'a> {
 
     #[doc(hidden)]
     pub attributes: Vec<(String, AttributeType)>,
+
+    whitelisted_custom_derives: Vec<ast::Name>,
 }
 
 impl<'a> Registry<'a> {
@@ -80,6 +82,7 @@ impl<'a> Registry<'a> {
             llvm_passes: vec![],
             attributes: vec![],
             mir_passes: Vec::new(),
+            whitelisted_custom_derives: Vec::new(),
         }
     }
 
@@ -115,6 +118,21 @@ impl<'a> Registry<'a> {
         }));
     }
 
+    /// This can be used in place of `register_syntax_extension` to register legacy custom derives
+    /// (i.e. attribute syntax extensions whose name begins with `derive_`). Legacy custom
+    /// derives defined by this function do not trigger deprecation warnings when used.
+    #[unstable(feature = "rustc_private", issue = "27812")]
+    #[rustc_deprecated(since = "1.15.0", reason = "replaced by macros 1.1 (RFC 1861)")]
+    pub fn register_custom_derive(&mut self, name: ast::Name, extension: SyntaxExtension) {
+        assert!(name.as_str().starts_with("derive_"));
+        self.whitelisted_custom_derives.push(name);
+        self.register_syntax_extension(name, extension);
+    }
+
+    pub fn take_whitelisted_custom_derives(&mut self) -> Vec<ast::Name> {
+        ::std::mem::replace(&mut self.whitelisted_custom_derives, Vec::new())
+    }
+
     /// Register a macro of the usual kind.
     ///
     /// This is a convenience wrapper for `register_syntax_extension`.