From ff690931b7aeff7c1b0f5bf6a33ce2b1b980ab70 Mon Sep 17 00:00:00 2001 From: Rune Tynan Date: Sat, 28 Nov 2020 20:46:17 -0500 Subject: Add support for multi-argument decl macros --- src/librustdoc/clean/mod.rs | 28 ++++++++++++++++++++-------- src/test/rustdoc/decl_macro.rs | 17 +++++++++++++++++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index f16ad40d6e2..54719e4d6a2 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -2330,14 +2330,26 @@ impl Clean for (&hir::MacroDef<'_>, Option) { .collect::(), ) } 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::(), - ) + 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::(), + ) + } else { + format!( + "{}macro {} {{\n{}}}", + vis.print_with_space(), + name, + matchers + .iter() + .map(|span| { format!(" {} => {{ ... }},\n", span.to_src(cx)) }) + .collect::(), + ) + } }; Item::from_hir_id_and_parts( diff --git a/src/test/rustdoc/decl_macro.rs b/src/test/rustdoc/decl_macro.rs index 45b4a3fac21..42a29799483 100644 --- a/src/test/rustdoc/decl_macro.rs +++ b/src/test/rustdoc/decl_macro.rs @@ -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),+) => { + + } +} -- cgit 1.4.1-3-g733a5