From 8fb1250aba8135679463351a3813c04ae45bf311 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 10 Oct 2017 23:39:10 +0200 Subject: [PATCH] Improve sidebar rendering and add methods list --- src/librustdoc/html/render.rs | 62 ++++++++++++++++++++------ src/librustdoc/html/static/rustdoc.css | 27 ++++++++--- 2 files changed, 69 insertions(+), 20 deletions(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index d538428a7e9a9..b73988823f448 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -3513,12 +3513,29 @@ impl<'a> fmt::Display for Sidebar<'a> { } } +fn get_methods(i: &clean::Impl) -> Vec { + i.items.iter().filter_map(|item| { + match item.name { + // Maybe check with clean::Visibility::Public as well? + Some(ref name) if !name.is_empty() && item.visibility.is_some() && item.is_method() => { + Some(format!("{name}", name = name)) + } + _ => None, + } + }).collect::>() +} + fn sidebar_assoc_items(it: &clean::Item) -> String { let mut out = String::new(); let c = cache(); if let Some(v) = c.impls.get(&it.def_id) { - if v.iter().any(|i| i.inner_impl().trait_.is_none()) { - out.push_str("
  • Methods
  • "); + let ret = v.iter() + .filter(|i| i.inner_impl().trait_.is_none()) + .flat_map(|i| get_methods(i.inner_impl())) + .collect::(); + if !ret.is_empty() { + out.push_str(&format!("Methods\ +
    {}
    ", ret)); } if v.iter().any(|i| i.inner_impl().trait_.is_some()) { @@ -3534,16 +3551,33 @@ fn sidebar_assoc_items(it: &clean::Item) -> String { let inner_impl = target.def_id().or(target.primitive_type().and_then(|prim| { c.primitive_locations.get(&prim).cloned() })).and_then(|did| c.impls.get(&did)); - if inner_impl.is_some() { - out.push_str("
  • "); + if let Some(impls) = inner_impl { + out.push_str(""); out.push_str(&format!("Methods from {:#}<Target={:#}>", - impl_.inner_impl().trait_.as_ref().unwrap(), - target)); - out.push_str("
  • "); + impl_.inner_impl().trait_.as_ref().unwrap(), + target)); + out.push_str(""); + let ret = impls.iter() + .filter(|i| i.inner_impl().trait_.is_none()) + .flat_map(|i| get_methods(i.inner_impl())) + .collect::(); + out.push_str(&format!("
    {}
    ", ret)); } } } - out.push_str("
  • Trait Implementations
  • "); + let ret = v.iter() + .filter_map(|i| if let Some(ref i) = i.inner_impl().trait_ { + let out = format!("{:#}", i).replace("<", "<").replace(">", ">"); + Some(format!("{name}", i, out)) + } else { + None + }) + .collect::(); + if !ret.is_empty() { + out.push_str("\ + Trait Implementations"); + out.push_str(&format!("
    {}
    ", ret)); + } } } @@ -3564,7 +3598,7 @@ fn sidebar_struct(fmt: &mut fmt::Formatter, it: &clean::Item, sidebar.push_str(&sidebar_assoc_items(it)); if !sidebar.is_empty() { - write!(fmt, "
      {}
    ", sidebar)?; + write!(fmt, "
    {}
    ", sidebar)?; } Ok(()) } @@ -3606,7 +3640,7 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item, sidebar.push_str("
  • Implementors
  • "); - write!(fmt, "
      {}
    ", sidebar) + write!(fmt, "
    {}
    ", sidebar) } fn sidebar_primitive(fmt: &mut fmt::Formatter, it: &clean::Item, @@ -3614,7 +3648,7 @@ fn sidebar_primitive(fmt: &mut fmt::Formatter, it: &clean::Item, let sidebar = sidebar_assoc_items(it); if !sidebar.is_empty() { - write!(fmt, "
      {}
    ", sidebar)?; + write!(fmt, "
    {}
    ", sidebar)?; } Ok(()) } @@ -3624,7 +3658,7 @@ fn sidebar_typedef(fmt: &mut fmt::Formatter, it: &clean::Item, let sidebar = sidebar_assoc_items(it); if !sidebar.is_empty() { - write!(fmt, "
      {}
    ", sidebar)?; + write!(fmt, "
    {}
    ", sidebar)?; } Ok(()) } @@ -3641,7 +3675,7 @@ fn sidebar_union(fmt: &mut fmt::Formatter, it: &clean::Item, sidebar.push_str(&sidebar_assoc_items(it)); if !sidebar.is_empty() { - write!(fmt, "
      {}
    ", sidebar)?; + write!(fmt, "
    {}
    ", sidebar)?; } Ok(()) } @@ -3657,7 +3691,7 @@ fn sidebar_enum(fmt: &mut fmt::Formatter, it: &clean::Item, sidebar.push_str(&sidebar_assoc_items(it)); if !sidebar.is_empty() { - write!(fmt, "
      {}
    ", sidebar)?; + write!(fmt, "
    {}
    ", sidebar)?; } Ok(()) } diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index 9978435a11243..dcb0de3bb92de 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -188,18 +188,16 @@ nav.sub { .js-only, .hidden { display: none !important; } -.sidebar { - padding: 10px; -} .sidebar img { margin: 20px auto; display: block; + margin-top: 10px; } .sidebar .location { border: 1px solid; font-size: 17px; - margin: 30px 0 20px 0; + margin: 30px 10px 20px 10px; text-align: center; word-wrap: break-word; } @@ -220,7 +218,7 @@ nav.sub { .location a:first-child { font-weight: 500; } .block { - padding: 0 10px; + padding: 0; margin-bottom: 14px; } .block h2, .block h3 { @@ -229,7 +227,7 @@ nav.sub { text-align: center; } .block ul, .block li { - margin: 0; + margin: 0 10px; padding: 0; list-style: none; } @@ -245,6 +243,23 @@ nav.sub { transition: border 500ms ease-out; } +.sidebar-title { + border-top: 1px solid #777; + border-bottom: 1px solid #777; + text-align: center; + font-size: 17px; + margin-bottom: 5px; +} + +.sidebar-links { + margin-bottom: 15px; +} + +.sidebar-links > a { + padding-left: 10px; + width: 100%; +} + .content { padding: 15px 0; }