diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs
index f7eb136a754e..8d304b45590c 100644
--- a/src/librustdoc/html/render/mod.rs
+++ b/src/librustdoc/html/render/mod.rs
@@ -4303,58 +4303,7 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
.filter(|i| i.inner_impl().trait_.is_some())
.find(|i| i.inner_impl().trait_.def_id() == c.deref_trait_did)
{
- debug!("found Deref: {:?}", impl_);
- if let Some((target, real_target)) =
- impl_.inner_impl().items.iter().find_map(|item| match *item.kind {
- clean::TypedefItem(ref t, true) => Some(match *t {
- clean::Typedef { item_type: Some(ref type_), .. } => (type_, &t.type_),
- _ => (&t.type_, &t.type_),
- }),
- _ => None,
- })
- {
- debug!("found target, real_target: {:?} {:?}", target, real_target);
- let deref_mut = v
- .iter()
- .filter(|i| i.inner_impl().trait_.is_some())
- .any(|i| i.inner_impl().trait_.def_id() == c.deref_mut_trait_did);
- let inner_impl = target
- .def_id()
- .or_else(|| {
- target
- .primitive_type()
- .and_then(|prim| c.primitive_locations.get(&prim).cloned())
- })
- .and_then(|did| c.impls.get(&did));
- if let Some(impls) = inner_impl {
- debug!("found inner_impl: {:?}", impls);
- out.push_str("");
- let mut ret = impls
- .iter()
- .filter(|i| i.inner_impl().trait_.is_none())
- .flat_map(|i| {
- get_methods(i.inner_impl(), true, &mut used_links, deref_mut)
- })
- .collect::>();
- // We want links' order to be reproducible so we don't use unstable sort.
- ret.sort();
- if !ret.is_empty() {
- out.push_str(&format!(
- "",
- ret.join("")
- ));
- }
- }
- }
+ out.push_str(&sidebar_deref_methods(impl_, v));
}
let format_impls = |impls: Vec<&Impl>| {
let mut links = FxHashSet::default();
@@ -4422,6 +4371,57 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
out
}
+fn sidebar_deref_methods(impl_: &Impl, v: &Vec) -> String {
+ let mut out = String::new();
+ let c = cache();
+
+ debug!("found Deref: {:?}", impl_);
+ if let Some((target, real_target)) =
+ impl_.inner_impl().items.iter().find_map(|item| match *item.kind {
+ clean::TypedefItem(ref t, true) => Some(match *t {
+ clean::Typedef { item_type: Some(ref type_), .. } => (type_, &t.type_),
+ _ => (&t.type_, &t.type_),
+ }),
+ _ => None,
+ })
+ {
+ debug!("found target, real_target: {:?} {:?}", target, real_target);
+ let deref_mut = v
+ .iter()
+ .filter(|i| i.inner_impl().trait_.is_some())
+ .any(|i| i.inner_impl().trait_.def_id() == c.deref_mut_trait_did);
+ let inner_impl = target
+ .def_id()
+ .or_else(|| {
+ target.primitive_type().and_then(|prim| c.primitive_locations.get(&prim).cloned())
+ })
+ .and_then(|did| c.impls.get(&did));
+ if let Some(impls) = inner_impl {
+ debug!("found inner_impl: {:?}", impls);
+ out.push_str("");
+ let mut used_links = FxHashSet::default();
+ let mut ret = impls
+ .iter()
+ .filter(|i| i.inner_impl().trait_.is_none())
+ .flat_map(|i| get_methods(i.inner_impl(), true, &mut used_links, deref_mut))
+ .collect::>();
+ // We want links' order to be reproducible so we don't use unstable sort.
+ ret.sort();
+ if !ret.is_empty() {
+ out.push_str(&format!("", ret.join("")));
+ }
+ }
+ }
+
+ out
+}
+
fn sidebar_struct(buf: &mut Buffer, it: &clean::Item, s: &clean::Struct) {
let mut sidebar = String::new();
let fields = get_struct_fields_name(&s.fields);