Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/expand_macro.rs')
-rw-r--r--crates/ide/src/expand_macro.rs31
1 files changed, 27 insertions, 4 deletions
diff --git a/crates/ide/src/expand_macro.rs b/crates/ide/src/expand_macro.rs
index 889b3748ad..8ec5e10c4d 100644
--- a/crates/ide/src/expand_macro.rs
+++ b/crates/ide/src/expand_macro.rs
@@ -37,10 +37,11 @@ pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<
if path == "derive" {
let mut tt = tt.syntax().children_with_tokens().skip(1).join("");
tt.pop();
- return sema
- .expand_derive_macro(&attr)
- .map(insert_whitespaces)
- .map(|expansion| ExpandedMacro { name: tt, expansion });
+ let expansions = sema.expand_derive_macro(&attr)?;
+ return Some(ExpandedMacro {
+ name: tt,
+ expansion: expansions.into_iter().map(insert_whitespaces).join(""),
+ });
}
}
}
@@ -382,4 +383,26 @@ struct Foo {}
"#]],
);
}
+
+ #[test]
+ fn macro_expand_derive_multi() {
+ check(
+ r#"
+#[rustc_builtin_macro]
+pub macro Clone {}
+#[rustc_builtin_macro]
+pub macro Copy {}
+
+#[derive(Cop$0y, Clone)]
+struct Foo {}
+"#,
+ expect![[r#"
+ Copy, Clone
+ impl< >crate::marker::Copy for Foo< >{}
+
+ impl< >crate::clone::Clone for Foo< >{}
+
+ "#]],
+ );
+ }
}