Skip to content

Commit bfdea24

Browse files
committed
make item_macro and item_proc_macro return impl fmt::Display
1 parent 37350c1 commit bfdea24

File tree

1 file changed

+48
-41
lines changed

1 file changed

+48
-41
lines changed

src/librustdoc/html/render/print_item.rs

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,10 @@ pub(super) fn print_item(cx: &Context<'_>, item: &clean::Item, buf: &mut String)
249249
clean::TypeAliasItem(ref t) => {
250250
write_str(buf, format_args!("{}", item_type_alias(cx, item, t)))
251251
}
252-
clean::MacroItem(ref m) => item_macro(buf, cx, item, m),
253-
clean::ProcMacroItem(ref m) => item_proc_macro(buf, cx, item, m),
252+
clean::MacroItem(ref m) => write_str(buf, format_args!("{}", item_macro(cx, item, m))),
253+
clean::ProcMacroItem(ref m) => {
254+
write_str(buf, format_args!("{}", item_proc_macro(cx, item, m)))
255+
}
254256
clean::PrimitiveItem(_) => item_primitive(buf, cx, item),
255257
clean::StaticItem(ref i) => item_static(buf, cx, item, i, None),
256258
clean::ForeignStaticItem(ref i, safety) => item_static(buf, cx, item, i, Some(*safety)),
@@ -1873,51 +1875,56 @@ fn item_variants<'a, 'tcx>(
18731875
})
18741876
}
18751877

1876-
fn item_macro(w: &mut String, cx: &Context<'_>, it: &clean::Item, t: &clean::Macro) {
1877-
wrap_item(w, |w| {
1878-
// FIXME: Also print `#[doc(hidden)]` for `macro_rules!` if it `is_doc_hidden`.
1879-
if !t.macro_rules {
1880-
write_str(w, format_args!("{}", visibility_print_with_space(it, cx)));
1881-
}
1882-
write_str(w, format_args!("{}", Escape(&t.source)));
1883-
});
1884-
write_str(w, format_args!("{}", document(cx, it, None, HeadingOffset::H2)));
1878+
fn item_macro<'a, 'tcx>(
1879+
cx: &'a Context<'tcx>,
1880+
it: &'a clean::Item,
1881+
t: &'a clean::Macro,
1882+
) -> impl fmt::Display + 'a + Captures<'tcx> {
1883+
fmt::from_fn(|w| {
1884+
wrap_item(w, |w| {
1885+
// FIXME: Also print `#[doc(hidden)]` for `macro_rules!` if it `is_doc_hidden`.
1886+
if !t.macro_rules {
1887+
write!(w, "{}", visibility_print_with_space(it, cx))?;
1888+
}
1889+
write!(w, "{}", Escape(&t.source))
1890+
})?;
1891+
write!(w, "{}", document(cx, it, None, HeadingOffset::H2))
1892+
})
18851893
}
18861894

1887-
fn item_proc_macro(
1888-
w: &mut impl fmt::Write,
1889-
cx: &Context<'_>,
1890-
it: &clean::Item,
1891-
m: &clean::ProcMacro,
1892-
) {
1893-
wrap_item(w, |buffer| {
1894-
let name = it.name.expect("proc-macros always have names");
1895-
match m.kind {
1896-
MacroKind::Bang => {
1897-
write!(buffer, "{name}!() {{ <span class=\"comment\">/* proc-macro */</span> }}")
1898-
.unwrap();
1899-
}
1900-
MacroKind::Attr => {
1901-
write!(buffer, "#[{name}]").unwrap();
1902-
}
1903-
MacroKind::Derive => {
1904-
write!(buffer, "#[derive({name})]").unwrap();
1905-
if !m.helpers.is_empty() {
1906-
buffer
1907-
.write_str(
1895+
fn item_proc_macro<'a, 'tcx>(
1896+
cx: &'a Context<'tcx>,
1897+
it: &'a clean::Item,
1898+
m: &'a clean::ProcMacro,
1899+
) -> impl fmt::Display + 'a + Captures<'tcx> {
1900+
fmt::from_fn(|w| {
1901+
wrap_item(w, |w| {
1902+
let name = it.name.expect("proc-macros always have names");
1903+
match m.kind {
1904+
MacroKind::Bang => {
1905+
write!(w, "{name}!() {{ <span class=\"comment\">/* proc-macro */</span> }}")?;
1906+
}
1907+
MacroKind::Attr => {
1908+
write!(w, "#[{name}]")?;
1909+
}
1910+
MacroKind::Derive => {
1911+
write!(w, "#[derive({name})]")?;
1912+
if !m.helpers.is_empty() {
1913+
w.write_str(
19081914
"\n{\n \
1909-
<span class=\"comment\">// Attributes available to this derive:</span>\n",
1910-
)
1911-
.unwrap();
1912-
for attr in &m.helpers {
1913-
writeln!(buffer, " #[{attr}]").unwrap();
1915+
<span class=\"comment\">// Attributes available to this derive:</span>\n",
1916+
)?;
1917+
for attr in &m.helpers {
1918+
writeln!(w, " #[{attr}]")?;
1919+
}
1920+
w.write_str("}\n")?;
19141921
}
1915-
buffer.write_str("}\n").unwrap();
19161922
}
19171923
}
1918-
}
1919-
});
1920-
write!(w, "{}", document(cx, it, None, HeadingOffset::H2)).unwrap();
1924+
Ok(())
1925+
})?;
1926+
write!(w, "{}", document(cx, it, None, HeadingOffset::H2))
1927+
})
19211928
}
19221929

19231930
fn item_primitive(w: &mut impl fmt::Write, cx: &Context<'_>, it: &clean::Item) {

0 commit comments

Comments
 (0)