From 95bd87f849ebbd6a6d4bc24c318c40986a78b4f4 Mon Sep 17 00:00:00 2001 From: Muhammad Falak R Wani Date: Tue, 11 Jan 2022 13:09:05 +0530 Subject: [PATCH 1/3] librustdoc: impl core::fmt::Write for rustdoc::html::render::Buffer Signed-off-by: Muhammad Falak R Wani --- src/librustdoc/html/format.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 08840626259..47d626a1d88 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -64,6 +64,12 @@ crate struct Buffer { buffer: String, } +impl core::fmt::Write for Buffer { + fn write_str(&mut self, s: &str) -> fmt::Result { + self.buffer.write_str(s) + } +} + impl Buffer { crate fn empty_from(v: &Buffer) -> Buffer { Buffer { for_html: v.for_html, buffer: String::new() } From 66d7e50cb6424f1928eb810e0bbc6d856e22a567 Mon Sep 17 00:00:00 2001 From: Muhammad Falak R Wani Date: Tue, 11 Jan 2022 19:28:11 +0530 Subject: [PATCH 2/3] librustdoc: inline and forward all methods for `impl Write for Buffer` Signed-off-by: Muhammad Falak R Wani --- src/librustdoc/html/format.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 47d626a1d88..f4df9ef4a8c 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -65,9 +65,20 @@ crate struct Buffer { } impl core::fmt::Write for Buffer { + #[inline] fn write_str(&mut self, s: &str) -> fmt::Result { self.buffer.write_str(s) } + + #[inline] + fn write_char(&mut self, c: char) -> fmt::Result { + self.buffer.write_char(c) + } + + #[inline] + fn write_fmt(self: &mut Self, args: fmt::Arguments<'_>) -> fmt::Result { + self.buffer.write_fmt(args) + } } impl Buffer { From 62bea63888a7f1753c019852258d20788a544dfb Mon Sep 17 00:00:00 2001 From: Muhammad Falak R Wani Date: Tue, 1 Feb 2022 18:06:58 +0530 Subject: [PATCH 3/3] librustdoc: render: use render_into instead of creating a temp string Signed-off-by: Muhammad Falak R Wani --- src/librustdoc/html/render/print_item.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs index f2c111495ed..6592a56ba46 100644 --- a/src/librustdoc/html/render/print_item.rs +++ b/src/librustdoc/html/render/print_item.rs @@ -139,8 +139,7 @@ pub(super) fn print_item(cx: &Context<'_>, item: &clean::Item, buf: &mut Buffer, src_href: src_href.as_deref(), }; - let heading = item_vars.render().unwrap(); - buf.write_str(&heading); + item_vars.render_into(buf).unwrap(); match *item.kind { clean::ModuleItem(ref m) => item_module(buf, cx, item, &m.items),