Add support for multi-argument decl macros

This commit is contained in:
Rune Tynan 2020-11-28 20:46:17 -05:00
parent a61c09a897
commit ff690931b7
No known key found for this signature in database
GPG Key ID: 7ECC932F8B2C731E
2 changed files with 37 additions and 8 deletions

View File

@ -2330,14 +2330,26 @@ impl Clean<Item> for (&hir::MacroDef<'_>, Option<Ident>) {
.collect::<String>(),
)
} else {
// This code currently assumes that there will only be one or zero matchers, as syntax
// for multiple is not currently defined.
format!(
"{}macro {}{} {{\n\t...\n}}",
item.vis.clean(cx).print_with_space(),
name,
matchers.iter().map(|span| span.to_src(cx)).collect::<String>(),
)
let vis = item.vis.clean(cx);
if matchers.len() <= 1 {
format!(
"{}macro {}{} {{\n ...\n}}",
vis.print_with_space(),
name,
matchers.iter().map(|span| span.to_src(cx)).collect::<String>(),
)
} else {
format!(
"{}macro {} {{\n{}}}",
vis.print_with_space(),
name,
matchers
.iter()
.map(|span| { format!(" {} => {{ ... }},\n", span.to_src(cx)) })
.collect::<String>(),
)
}
};
Item::from_hir_id_and_parts(

View File

@ -13,3 +13,20 @@ pub macro my_macro() {
pub macro my_macro_2($($tok:tt)*) {
}
// @has decl_macro/macro.my_macro_multi.html //pre 'pub macro my_macro_multi {'
// @has - //pre '(_) => { ... },'
// @has - //pre '($foo:ident . $bar:expr) => { ... },'
// @has - //pre '($($foo:literal),+) => { ... }'
// @has - //pre '}'
pub macro my_macro_multi {
(_) => {
},
($foo:ident . $bar:expr) => {
},
($($foo:literal),+) => {
}
}