mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-28 23:53:55 +00:00
Rollup merge of #43966 - GuillaumeGomez:remove-dup, r=QuietMisdreavus
Remove duplicates in rustdoc Fixes #43934. Two things however: 1. I'm not happy with the current check. It seems completely overkill and unsatisfying. 2. I have no idea how to test if there is only one element and not two. r? @rust-lang/docs
This commit is contained in:
commit
e9a6dccce0
@ -323,6 +323,10 @@ impl Item {
|
||||
pub fn is_union(&self) -> bool {
|
||||
self.type_() == ItemType::Union
|
||||
}
|
||||
pub fn is_import(&self) -> bool {
|
||||
self.type_() == ItemType::Import
|
||||
}
|
||||
|
||||
pub fn is_stripped(&self) -> bool {
|
||||
match self.inner { StrippedItem(..) => true, _ => false }
|
||||
}
|
||||
|
@ -1764,6 +1764,37 @@ fn item_module(w: &mut fmt::Formatter, cx: &Context,
|
||||
}
|
||||
|
||||
indices.sort_by(|&i1, &i2| cmp(&items[i1], &items[i2], i1, i2));
|
||||
// This call is to remove reexport duplicates in cases such as:
|
||||
//
|
||||
// ```
|
||||
// pub mod foo {
|
||||
// pub mod bar {
|
||||
// pub trait Double { fn foo(); }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// pub use foo::bar::*;
|
||||
// pub use foo::*;
|
||||
// ```
|
||||
//
|
||||
// `Double` will appear twice in the generated docs.
|
||||
//
|
||||
// FIXME: This code is quite ugly and could be improved. Small issue: DefId
|
||||
// can be identical even if the elements are different (mostly in imports).
|
||||
// So in case this is an import, we keep everything by adding a "unique id"
|
||||
// (which is the position in the vector).
|
||||
indices.dedup_by_key(|i| (items[*i].def_id,
|
||||
if items[*i].name.as_ref().is_some() {
|
||||
Some(full_path(cx, &items[*i]).clone())
|
||||
} else {
|
||||
None
|
||||
},
|
||||
items[*i].type_(),
|
||||
if items[*i].is_import() {
|
||||
*i
|
||||
} else {
|
||||
0
|
||||
}));
|
||||
|
||||
debug!("{:?}", indices);
|
||||
let mut curty = None;
|
||||
|
24
src/test/rustdoc/remove-duplicates.rs
Normal file
24
src/test/rustdoc/remove-duplicates.rs
Normal file
@ -0,0 +1,24 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![crate_name = "foo"]
|
||||
|
||||
mod foo {
|
||||
pub use bar::*;
|
||||
pub mod bar {
|
||||
pub trait Foo {
|
||||
fn foo();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// @count foo/index.html '//*[@class="trait"]' 1
|
||||
pub use foo::bar::*;
|
||||
pub use foo::*;
|
Loading…
Reference in New Issue
Block a user