Skip to content

Commit 61c8aae

Browse files
committed
Extract sidebar_deref_methods function
1 parent 6163bfd commit 61c8aae

File tree

1 file changed

+52
-52
lines changed
  • src/librustdoc/html/render

1 file changed

+52
-52
lines changed

Diff for: src/librustdoc/html/render/mod.rs

+52-52
Original file line numberDiff line numberDiff line change
@@ -4303,58 +4303,7 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
43034303
.filter(|i| i.inner_impl().trait_.is_some())
43044304
.find(|i| i.inner_impl().trait_.def_id() == c.deref_trait_did)
43054305
{
4306-
debug!("found Deref: {:?}", impl_);
4307-
if let Some((target, real_target)) =
4308-
impl_.inner_impl().items.iter().find_map(|item| match *item.kind {
4309-
clean::TypedefItem(ref t, true) => Some(match *t {
4310-
clean::Typedef { item_type: Some(ref type_), .. } => (type_, &t.type_),
4311-
_ => (&t.type_, &t.type_),
4312-
}),
4313-
_ => None,
4314-
})
4315-
{
4316-
debug!("found target, real_target: {:?} {:?}", target, real_target);
4317-
let deref_mut = v
4318-
.iter()
4319-
.filter(|i| i.inner_impl().trait_.is_some())
4320-
.any(|i| i.inner_impl().trait_.def_id() == c.deref_mut_trait_did);
4321-
let inner_impl = target
4322-
.def_id()
4323-
.or_else(|| {
4324-
target
4325-
.primitive_type()
4326-
.and_then(|prim| c.primitive_locations.get(&prim).cloned())
4327-
})
4328-
.and_then(|did| c.impls.get(&did));
4329-
if let Some(impls) = inner_impl {
4330-
debug!("found inner_impl: {:?}", impls);
4331-
out.push_str("<a class=\"sidebar-title\" href=\"#deref-methods\">");
4332-
out.push_str(&format!(
4333-
"Methods from {}&lt;Target={}&gt;",
4334-
Escape(&format!(
4335-
"{:#}",
4336-
impl_.inner_impl().trait_.as_ref().unwrap().print()
4337-
)),
4338-
Escape(&format!("{:#}", real_target.print()))
4339-
));
4340-
out.push_str("</a>");
4341-
let mut ret = impls
4342-
.iter()
4343-
.filter(|i| i.inner_impl().trait_.is_none())
4344-
.flat_map(|i| {
4345-
get_methods(i.inner_impl(), true, &mut used_links, deref_mut)
4346-
})
4347-
.collect::<Vec<_>>();
4348-
// We want links' order to be reproducible so we don't use unstable sort.
4349-
ret.sort();
4350-
if !ret.is_empty() {
4351-
out.push_str(&format!(
4352-
"<div class=\"sidebar-links\">{}</div>",
4353-
ret.join("")
4354-
));
4355-
}
4356-
}
4357-
}
4306+
out.push_str(&sidebar_deref_methods(impl_, v));
43584307
}
43594308
let format_impls = |impls: Vec<&Impl>| {
43604309
let mut links = FxHashSet::default();
@@ -4422,6 +4371,57 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
44224371
out
44234372
}
44244373

4374+
fn sidebar_deref_methods(impl_: &Impl, v: &Vec<Impl>) -> String {
4375+
let mut out = String::new();
4376+
let c = cache();
4377+
4378+
debug!("found Deref: {:?}", impl_);
4379+
if let Some((target, real_target)) =
4380+
impl_.inner_impl().items.iter().find_map(|item| match *item.kind {
4381+
clean::TypedefItem(ref t, true) => Some(match *t {
4382+
clean::Typedef { item_type: Some(ref type_), .. } => (type_, &t.type_),
4383+
_ => (&t.type_, &t.type_),
4384+
}),
4385+
_ => None,
4386+
})
4387+
{
4388+
debug!("found target, real_target: {:?} {:?}", target, real_target);
4389+
let deref_mut = v
4390+
.iter()
4391+
.filter(|i| i.inner_impl().trait_.is_some())
4392+
.any(|i| i.inner_impl().trait_.def_id() == c.deref_mut_trait_did);
4393+
let inner_impl = target
4394+
.def_id()
4395+
.or_else(|| {
4396+
target.primitive_type().and_then(|prim| c.primitive_locations.get(&prim).cloned())
4397+
})
4398+
.and_then(|did| c.impls.get(&did));
4399+
if let Some(impls) = inner_impl {
4400+
debug!("found inner_impl: {:?}", impls);
4401+
out.push_str("<a class=\"sidebar-title\" href=\"#deref-methods\">");
4402+
out.push_str(&format!(
4403+
"Methods from {}&lt;Target={}&gt;",
4404+
Escape(&format!("{:#}", impl_.inner_impl().trait_.as_ref().unwrap().print())),
4405+
Escape(&format!("{:#}", real_target.print()))
4406+
));
4407+
out.push_str("</a>");
4408+
let mut used_links = FxHashSet::default();
4409+
let mut ret = impls
4410+
.iter()
4411+
.filter(|i| i.inner_impl().trait_.is_none())
4412+
.flat_map(|i| get_methods(i.inner_impl(), true, &mut used_links, deref_mut))
4413+
.collect::<Vec<_>>();
4414+
// We want links' order to be reproducible so we don't use unstable sort.
4415+
ret.sort();
4416+
if !ret.is_empty() {
4417+
out.push_str(&format!("<div class=\"sidebar-links\">{}</div>", ret.join("")));
4418+
}
4419+
}
4420+
}
4421+
4422+
out
4423+
}
4424+
44254425
fn sidebar_struct(buf: &mut Buffer, it: &clean::Item, s: &clean::Struct) {
44264426
let mut sidebar = String::new();
44274427
let fields = get_struct_fields_name(&s.fields);

0 commit comments

Comments
 (0)