Auto merge of #114204 - GuillaumeGomez:remove-unneeded-clone-calls, r=notriddle

[rustdoc] Remove unneeded `clone()` calls for `derive_id`

I realized we were cloning values before passing them to `derive_id` where they are cloned again, which isn't great. Since they'll be cloned anyway, let's allow to pass both by reference and by value.

r? `@notriddle`
This commit is contained in:
bors 2023-07-30 18:11:08 +00:00
commit a8be6e070f
5 changed files with 11 additions and 16 deletions

View File

@ -532,8 +532,6 @@ fn next(&mut self) -> Option<Self::Item> {
let start_tags = format!(
"<h{level} id=\"{id}\">\
<a href=\"#{id}\">",
id = id,
level = level
);
return Some((Event::Html(start_tags.into()), 0..0));
}

View File

@ -38,7 +38,7 @@ fn test_unique_id() {
];
let mut map = IdMap::new();
let actual: Vec<String> = input.iter().map(|s| map.derive(s.to_string())).collect();
let actual: Vec<String> = input.iter().map(|s| map.derive(s)).collect();
assert_eq!(&actual[..], expected);
}

View File

@ -162,7 +162,7 @@ pub(super) fn sess(&self) -> &'tcx Session {
self.shared.tcx.sess
}
pub(super) fn derive_id(&mut self, id: String) -> String {
pub(super) fn derive_id<S: AsRef<str> + ToString>(&mut self, id: S) -> String {
self.id_map.derive(id)
}

View File

@ -1153,9 +1153,7 @@ fn render_assoc_items_inner(
AssocItemRender::DerefFor { trait_, type_, deref_mut_ } => {
let id =
cx.derive_id(small_url_encode(format!("deref-methods-{:#}", type_.print(cx))));
if let Some(def_id) = type_.def_id(cx.cache()) {
cx.deref_id_map.insert(def_id, id.clone());
}
let derived_id = cx.derive_id(&id);
write_impl_section_heading(
&mut tmp_buf,
&format!(
@ -1165,11 +1163,10 @@ fn render_assoc_items_inner(
),
&id,
);
(
RenderMode::ForDeref { mut_: deref_mut_ },
cx.derive_id(id),
r#" class="impl-items""#,
)
if let Some(def_id) = type_.def_id(cx.cache()) {
cx.deref_id_map.insert(def_id, id);
}
(RenderMode::ForDeref { mut_: deref_mut_ }, derived_id, r#" class="impl-items""#)
}
};
let mut impls_buf = Buffer::html();
@ -1579,7 +1576,7 @@ fn doc_impl_item(
kind @ (clean::TyAssocConstItem(generics, ty)
| clean::AssocConstItem(generics, ty, _)) => {
let source_id = format!("{item_type}.{name}");
let id = cx.derive_id(source_id.clone());
let id = cx.derive_id(&source_id);
write!(w, "<section id=\"{id}\" class=\"{item_type}{in_trait_class}\">");
render_rightside(w, cx, item, containing_item, render_mode);
if trait_.is_some() {
@ -1605,7 +1602,7 @@ fn doc_impl_item(
}
clean::TyAssocTypeItem(generics, bounds) => {
let source_id = format!("{item_type}.{name}");
let id = cx.derive_id(source_id.clone());
let id = cx.derive_id(&source_id);
write!(w, "<section id=\"{id}\" class=\"{item_type}{in_trait_class}\">");
if trait_.is_some() {
// Anchors are only used on trait impls.
@ -1626,7 +1623,7 @@ fn doc_impl_item(
}
clean::AssocTypeItem(tydef, _bounds) => {
let source_id = format!("{item_type}.{name}");
let id = cx.derive_id(source_id.clone());
let id = cx.derive_id(&source_id);
write!(w, "<section id=\"{id}\" class=\"{item_type}{in_trait_class}\">");
if trait_.is_some() {
// Anchors are only used on trait impls.

View File

@ -433,7 +433,7 @@ fn cmp(
<a href=\"#{id}\">{name}</a>\
</h2>{}",
ITEM_TABLE_OPEN,
id = cx.derive_id(my_section.id().to_owned()),
id = cx.derive_id(my_section.id()),
name = my_section.name(),
);
}