about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorYotam Ofek <yotam.ofek@gmail.com>2025-02-10 17:46:32 +0000
committerYotam Ofek <yotam.ofek@gmail.com>2025-02-14 14:50:05 +0000
commit5cc64e8da8db1baba601fff5ae90cf8cef2ba183 (patch)
tree789cae2daf437d2de783674b0560486f45224021 /src
parentea15f6d792069df85f4f371130a20c8d95f02074 (diff)
downloadrust-5cc64e8da8db1baba601fff5ae90cf8cef2ba183.tar.gz
rust-5cc64e8da8db1baba601fff5ae90cf8cef2ba183.zip
librustdoc: lazily format "read more" link in `document_short`
Diffstat (limited to 'src')
-rw-r--r--src/librustdoc/html/render/mod.rs21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs
index 6896925753a..204631063a2 100644
--- a/src/librustdoc/html/render/mod.rs
+++ b/src/librustdoc/html/render/mod.rs
@@ -569,18 +569,27 @@ fn document_short<'a, 'cx: 'a>(
             let (mut summary_html, has_more_content) =
                 MarkdownSummaryLine(&s, &item.links(cx)).into_string_with_has_more_content();
 
-            if has_more_content {
-                let link =
-                    format!(" <a{}>Read more</a>", assoc_href_attr(item, link, cx).maybe_display());
+            let link = if has_more_content {
+                let link = fmt::from_fn(|f| {
+                    write!(
+                        f,
+                        " <a{}>Read more</a>",
+                        assoc_href_attr(item, link, cx).maybe_display()
+                    )
+                });
 
                 if let Some(idx) = summary_html.rfind("</p>") {
-                    summary_html.insert_str(idx, &link);
+                    summary_html.insert_str(idx, &link.to_string());
+                    None
                 } else {
-                    summary_html.push_str(&link);
+                    Some(link)
                 }
+            } else {
+                None
             }
+            .maybe_display();
 
-            write!(f, "<div class='docblock'>{summary_html}</div>")?;
+            write!(f, "<div class='docblock'>{summary_html}{link}</div>")?;
         }
         Ok(())
     })