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.rs | 31 |
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< >{} + + "#]], + ); + } } |