rustdoc: reduce allocations when generating tooltips
An attempt to reduce the perf regression in https://github.com/rust-lang/rust/pull/108052#issuecomment-1430631861
This commit is contained in:
parent
0978711950
commit
49d995a4cf
7 changed files with 40 additions and 29 deletions
|
|
@ -772,14 +772,21 @@ pub(crate) fn link_tooltip(did: DefId, fragment: &Option<UrlFragment>, cx: &Cont
|
|||
let Some((fqp, shortty)) = cache.paths.get(&did)
|
||||
.or_else(|| cache.external_paths.get(&did))
|
||||
else { return String::new() };
|
||||
let fqp = fqp.iter().map(|sym| sym.as_str()).join("::");
|
||||
let mut buf = Buffer::new();
|
||||
if let &Some(UrlFragment::Item(id)) = fragment {
|
||||
let name = cx.tcx().item_name(id);
|
||||
let descr = cx.tcx().def_descr(id);
|
||||
format!("{descr} {fqp}::{name}")
|
||||
} else {
|
||||
format!("{shortty} {fqp}")
|
||||
write!(buf, "{} ", cx.tcx().def_descr(id));
|
||||
for component in fqp {
|
||||
write!(buf, "{component}::");
|
||||
}
|
||||
write!(buf, "{}", cx.tcx().item_name(id));
|
||||
} else if !fqp.is_empty() {
|
||||
let mut fqp_it = fqp.into_iter();
|
||||
write!(buf, "{shortty} {}", fqp_it.next().unwrap());
|
||||
for component in fqp_it {
|
||||
write!(buf, "::{component}");
|
||||
}
|
||||
}
|
||||
buf.into_inner()
|
||||
}
|
||||
|
||||
/// Used to render a [`clean::Path`].
|
||||
|
|
|
|||
|
|
@ -981,7 +981,7 @@ impl Markdown<'_> {
|
|||
let mut replacer = |broken_link: BrokenLink<'_>| {
|
||||
links
|
||||
.iter()
|
||||
.find(|link| link.original_text.as_str() == &*broken_link.reference)
|
||||
.find(|link| &*link.original_text == &*broken_link.reference)
|
||||
.map(|link| (link.href.as_str().into(), link.tooltip.as_str().into()))
|
||||
};
|
||||
|
||||
|
|
@ -1064,7 +1064,7 @@ impl MarkdownSummaryLine<'_> {
|
|||
let mut replacer = |broken_link: BrokenLink<'_>| {
|
||||
links
|
||||
.iter()
|
||||
.find(|link| link.original_text.as_str() == &*broken_link.reference)
|
||||
.find(|link| &*link.original_text == &*broken_link.reference)
|
||||
.map(|link| (link.href.as_str().into(), link.tooltip.as_str().into()))
|
||||
};
|
||||
|
||||
|
|
@ -1111,7 +1111,7 @@ fn markdown_summary_with_limit(
|
|||
let mut replacer = |broken_link: BrokenLink<'_>| {
|
||||
link_names
|
||||
.iter()
|
||||
.find(|link| link.original_text.as_str() == &*broken_link.reference)
|
||||
.find(|link| &*link.original_text == &*broken_link.reference)
|
||||
.map(|link| (link.href.as_str().into(), link.tooltip.as_str().into()))
|
||||
};
|
||||
|
||||
|
|
@ -1192,7 +1192,7 @@ pub(crate) fn plain_text_summary(md: &str, link_names: &[RenderedLink]) -> Strin
|
|||
let mut replacer = |broken_link: BrokenLink<'_>| {
|
||||
link_names
|
||||
.iter()
|
||||
.find(|link| link.original_text.as_str() == &*broken_link.reference)
|
||||
.find(|link| &*link.original_text == &*broken_link.reference)
|
||||
.map(|link| (link.href.as_str().into(), link.tooltip.as_str().into()))
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue