1
Fork 0

Deduplicate item sections

This commit is contained in:
Noah Lev 2022-01-07 16:20:53 -08:00
parent fa400ace11
commit 1115f69bf4
2 changed files with 13 additions and 22 deletions

View file

@ -2534,19 +2534,11 @@ fn item_ty_to_section(ty: ItemType) -> ItemSection {
fn sidebar_module(buf: &mut Buffer, items: &[clean::Item]) { fn sidebar_module(buf: &mut Buffer, items: &[clean::Item]) {
let mut sidebar = String::new(); let mut sidebar = String::new();
// Re-exports are handled a bit differently because they can be extern crates or imports. let mut already_emitted_sections = FxHashSet::default();
if items.iter().any(|it| {
it.name.is_some()
&& (it.type_() == ItemType::ExternCrate
|| (it.type_() == ItemType::Import && !it.is_stripped()))
}) {
let sec = item_ty_to_section(ItemType::Import);
sidebar.push_str(&format!("<li><a href=\"#{}\">{}</a></li>", sec.id(), sec.name()));
}
// ordering taken from item_module, reorder, where it prioritized elements in a certain order // ordering taken from item_module, reorder, where it prioritized elements in a certain order
// to print its headings // to print its headings
for &myty in &[ for &myty in &[
ItemType::Import,
ItemType::Primitive, ItemType::Primitive,
ItemType::Module, ItemType::Module,
ItemType::Macro, ItemType::Macro,
@ -2570,6 +2562,9 @@ fn sidebar_module(buf: &mut Buffer, items: &[clean::Item]) {
] { ] {
if items.iter().any(|it| !it.is_stripped() && it.type_() == myty && it.name.is_some()) { if items.iter().any(|it| !it.is_stripped() && it.type_() == myty && it.name.is_some()) {
let sec = item_ty_to_section(myty); let sec = item_ty_to_section(myty);
if !already_emitted_sections.insert(sec) {
continue;
}
sidebar.push_str(&format!("<li><a href=\"#{}\">{}</a></li>", sec.id(), sec.name())); sidebar.push_str(&format!("<li><a href=\"#{}\">{}</a></li>", sec.id(), sec.name()));
} }
} }

View file

@ -271,7 +271,7 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
}); });
debug!("{:?}", indices); debug!("{:?}", indices);
let mut curty = None; let mut last_section = None;
for &idx in &indices { for &idx in &indices {
let myitem = &items[idx]; let myitem = &items[idx];
@ -279,24 +279,20 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
continue; continue;
} }
let myty = Some(myitem.type_()); let my_section = item_ty_to_section(myitem.type_());
if curty == Some(ItemType::ExternCrate) && myty == Some(ItemType::Import) { if Some(my_section) != last_section {
// Put `extern crate` and `use` re-exports in the same section. if last_section.is_some() {
curty = myty;
} else if myty != curty {
if curty.is_some() {
w.write_str(ITEM_TABLE_CLOSE); w.write_str(ITEM_TABLE_CLOSE);
} }
curty = myty; last_section = Some(my_section);
let sec = item_ty_to_section(myty.unwrap());
write!( write!(
w, w,
"<h2 id=\"{id}\" class=\"small-section-header\">\ "<h2 id=\"{id}\" class=\"small-section-header\">\
<a href=\"#{id}\">{name}</a>\ <a href=\"#{id}\">{name}</a>\
</h2>\n{}", </h2>\n{}",
ITEM_TABLE_OPEN, ITEM_TABLE_OPEN,
id = cx.derive_id(sec.id().to_owned()), id = cx.derive_id(my_section.id().to_owned()),
name = sec.name(), name = my_section.name(),
); );
} }
@ -408,7 +404,7 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
} }
} }
if curty.is_some() { if last_section.is_some() {
w.write_str(ITEM_TABLE_CLOSE); w.write_str(ITEM_TABLE_CLOSE);
} }
} }