diff options
| author | Guillaume Gomez <guillaume.gomez@huawei.com> | 2021-10-12 15:06:52 +0200 |
|---|---|---|
| committer | Guillaume Gomez <guillaume.gomez@huawei.com> | 2021-10-12 15:06:52 +0200 |
| commit | d6dbff56e4789dc92c053881a8fe4d20f3bc28cd (patch) | |
| tree | 47181ea26f077f35f3b54336a5bc7d83a016167e /src/librustdoc | |
| parent | 9a757817c352801de8b0593728f8aee21e23cd53 (diff) | |
| download | rust-d6dbff56e4789dc92c053881a8fe4d20f3bc28cd.tar.gz rust-d6dbff56e4789dc92c053881a8fe4d20f3bc28cd.zip | |
List associated constants in the sidebar
Diffstat (limited to 'src/librustdoc')
| -rw-r--r-- | src/librustdoc/html/render/mod.rs | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index dc5aec3b084..71b9deca9d6 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -1837,6 +1837,20 @@ fn get_methods( .collect::<Vec<_>>() } +fn get_associated_constants(i: &clean::Impl, used_links: &mut FxHashSet<String>) -> Vec<String> { + i.items + .iter() + .filter_map(|item| match item.name { + Some(ref name) if !name.is_empty() && item.is_associated_const() => Some(format!( + "<a href=\"#{}\">{}</a>", + get_next_url(used_links, format!("associatedconstant.{}", name)), + name + )), + _ => None, + }) + .collect::<Vec<_>>() +} + // The point is to url encode any potential character from a type with genericity. fn small_url_encode(s: String) -> String { let mut st = String::new(); @@ -1881,22 +1895,39 @@ fn sidebar_assoc_items(cx: &Context<'_>, out: &mut Buffer, it: &clean::Item) { { let used_links_bor = &mut used_links; - let mut ret = v + let mut assoc_consts = v + .iter() + .flat_map(|i| get_associated_constants(i.inner_impl(), used_links_bor)) + .collect::<Vec<_>>(); + if !assoc_consts.is_empty() { + // We want links' order to be reproducible so we don't use unstable sort. + assoc_consts.sort(); + + out.push_str( + "<h3 class=\"sidebar-title\">\ + <a href=\"#implementations\">Associated Constants</a>\ + </h3>\ + <div class=\"sidebar-links\">", + ); + for line in assoc_consts { + out.push_str(&line); + } + out.push_str("</div>"); + } + let mut methods = v .iter() .filter(|i| i.inner_impl().trait_.is_none()) - .flat_map(move |i| { - get_methods(i.inner_impl(), false, used_links_bor, false, cx.tcx()) - }) + .flat_map(|i| get_methods(i.inner_impl(), false, used_links_bor, false, cx.tcx())) .collect::<Vec<_>>(); - if !ret.is_empty() { + if !methods.is_empty() { // We want links' order to be reproducible so we don't use unstable sort. - ret.sort(); + methods.sort(); out.push_str( "<h3 class=\"sidebar-title\"><a href=\"#implementations\">Methods</a></h3>\ <div class=\"sidebar-links\">", ); - for line in ret { + for line in methods { out.push_str(&line); } out.push_str("</div>"); |
