]> git.lizzy.rs Git - rust.git/commitdiff
Account for proc macro helpers when parsing attr
authorJonas Schievink <jonasschievink@gmail.com>
Mon, 5 Oct 2020 21:41:16 +0000 (23:41 +0200)
committerJonas Schievink <jonasschievink@gmail.com>
Mon, 5 Oct 2020 21:41:16 +0000 (23:41 +0200)
crates/hir_def/src/nameres/collector.rs
crates/hir_def/src/nameres/tests/macros.rs

index 100e25ffcf05733fe05a1284628870c0ce64c558..c8cd042644747ebcf1b4a508aaecf851702891b4 100644 (file)
@@ -1229,9 +1229,10 @@ fn collect_proc_macro_def(&mut self, func_name: &Name, attrs: &Attrs) {
         } else {
             let derive = attrs.by_key("proc_macro_derive");
             if let Some(arg) = derive.tt_values().next() {
-                if let [TokenTree::Leaf(Leaf::Ident(trait_name))] = &*arg.token_trees {
+                if let [TokenTree::Leaf(Leaf::Ident(trait_name)), ..] = &*arg.token_trees {
                     trait_name.as_name()
                 } else {
+                    log::trace!("malformed `#[proc_macro_derive]`: {}", arg);
                     return;
                 }
             } else {
index 0851c3b7d89524edf5cf8cb33c3622f571f12141..305fca0f9c1fd1fd6dc1bdcfa35a0c5b6019f7f7 100644 (file)
@@ -688,13 +688,20 @@ pub fn attribute_macro(_args: TokenStream, item: TokenStream) -> TokenStream {
         pub fn derive_macro(_item: TokenStream) -> TokenStream {
             TokenStream
         }
+
+        #[proc_macro_derive(AnotherTrait, attributes(helper_attr))]
+        pub fn derive_macro_2(_item: TokenStream) -> TokenStream {
+            TokenStream
+        }
         ",
         expect![[r#"
             crate
+            AnotherTrait: m
             DummyTrait: m
             TokenStream: t v
             attribute_macro: v m
             derive_macro: v
+            derive_macro_2: v
             function_like_macro: v m
         "#]],
     );