Skip to content

Commit

Permalink
Rollup merge of rust-lang#94002 - GuillaumeGomez:duplicated-sidebar-m…
Browse files Browse the repository at this point in the history
…acro, r=notriddle

rustdoc: Avoid duplicating macros in sidebar

Fixes rust-lang#93912.

cc `@jsha` (for the GUI test)
r? `@camelid`
  • Loading branch information
matthiaskrgr authored Feb 19, 2022
2 parents 188a292 + d9ea7bc commit 968f306
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 6 deletions.
17 changes: 11 additions & 6 deletions src/librustdoc/html/render/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,8 @@ impl<'tcx> Context<'tcx> {
fn build_sidebar_items(&self, m: &clean::Module) -> BTreeMap<String, Vec<NameDoc>> {
// BTreeMap instead of HashMap to get a sorted output
let mut map: BTreeMap<_, Vec<_>> = BTreeMap::new();
let mut inserted: FxHashMap<ItemType, FxHashSet<Symbol>> = FxHashMap::default();

for item in &m.items {
if item.is_stripped() {
continue;
Expand All @@ -258,13 +260,16 @@ impl<'tcx> Context<'tcx> {
let short = item.type_();
let myname = match item.name {
None => continue,
Some(ref s) => s.to_string(),
Some(s) => s,
};
let short = short.to_string();
map.entry(short).or_default().push((
myname,
Some(item.doc_value().map_or_else(String::new, |s| plain_text_summary(&s))),
));
if inserted.entry(short).or_default().insert(myname) {
let short = short.to_string();
let myname = myname.to_string();
map.entry(short).or_default().push((
myname,
Some(item.doc_value().map_or_else(String::new, |s| plain_text_summary(&s))),
));
}
}

if self.shared.sort_modules_alphabetically {
Expand Down
14 changes: 14 additions & 0 deletions src/test/rustdoc-gui/duplicate-macro-reexport.goml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// This test ensures that there is no macro duplicates in the sidebar.
goto: file://|DOC_PATH|/test_docs/macro.a.html
// Waiting for the elements in the sidebar to be rendered.
wait-for: ".sidebar-elems .others .macro"
// Check there is only one macro named "a" listed in the sidebar.
assert-count: (
"//*[@class='sidebar-elems']//*[@class='others']/*[@class='block macro']//li/a[text()='a']",
1,
)
// Check there is only one macro named "b" listed in the sidebar.
assert-count: (
"//*[@class='sidebar-elems']//*[@class='others']/*[@class='block macro']//li/a[text()='b']",
1,
)
3 changes: 3 additions & 0 deletions src/test/rustdoc-gui/src/test_docs/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,3 +271,6 @@ impl EmptyTrait1 for HasEmptyTraits {}
impl EmptyTrait2 for HasEmptyTraits {}
#[doc(cfg(feature = "some-feature"))]
impl EmptyTrait3 for HasEmptyTraits {}

mod macros;
pub use macros::*;
4 changes: 4 additions & 0 deletions src/test/rustdoc-gui/src/test_docs/macros.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#[macro_export]
macro_rules! a{ () => {}}
#[macro_export]
macro_rules! b{ () => {}}

0 comments on commit 968f306

Please sign in to comment.