diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index db605e57735..f7f2a45255e 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -552,6 +552,15 @@ pub fn generics(&self) -> Option<&Generics> {
_ => return None,
})
}
+
+ pub fn is_associated(&self) -> bool {
+ match *self {
+ ItemEnum::TypedefItem(_, _) |
+ ItemEnum::AssociatedConstItem(_, _) |
+ ItemEnum::AssociatedTypeItem(_, _) => true,
+ _ => false,
+ }
+ }
}
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index bb95696c513..72a1a30387c 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -3881,19 +3881,21 @@ fn doc_impl_item(w: &mut fmt::Formatter, cx: &Context, item: &clean::Item,
RenderMode::ForDeref { mut_: deref_mut_ } => should_render_item(&item, deref_mut_),
};
- let (mut is_hidden, extra_class) = if item.doc_value().is_some() {
+ let (is_hidden, extra_class) = if trait_.is_none() ||
+ item.doc_value().is_some() ||
+ item.inner.is_associated() {
(false, "")
} else {
(true, " hidden")
};
match item.inner {
clean::MethodItem(clean::Method { ref decl, .. }) |
- clean::TyMethodItem(clean::TyMethod{ ref decl, .. }) => {
+ clean::TyMethodItem(clean::TyMethod { ref decl, .. }) => {
// Only render when the method is not static or we allow static methods
if render_method_item {
let id = cx.derive_id(format!("{}.{}", item_type, name));
let ns_id = cx.derive_id(format!("{}.{}", name, item_type.name_space()));
- write!(w, "
", id, item_type)?;
+ write!(w, "", id, item_type, extra_class)?;
write!(w, "{}", spotlight_decl(decl)?)?;
write!(w, "", ns_id)?;
write!(w, "")?;
@@ -3910,7 +3912,6 @@ fn doc_impl_item(w: &mut fmt::Formatter, cx: &Context, item: &clean::Item,
render_stability_since_raw(w, item.stable_since(), outer_version)?;
}
write!(w, " |
")?;
- is_hidden = false;
}
}
clean::TypedefItem(ref tydef, _) => {
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index dbcb2df3cf9..23da4dfbbbd 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -2059,12 +2059,22 @@
onEach(document.getElementsByClassName('impl'), func);
onEach(document.getElementsByClassName('impl-items'), function(e) {
onEach(e.getElementsByClassName('associatedconstant'), func);
- if (e.getElementsByClassName('hidden').length > 0) {
+ var hiddenElems = e.getElementsByClassName('hidden');
+ var needToggle = false;
+
+ for (var i = 0; i < hiddenElems.length; ++i) {
+ if (hasClass(hiddenElems[i], "content") === false &&
+ hasClass(hiddenElems[i], "docblock") === false) {
+ needToggle = true;
+ break;
+ }
+ }
+ if (needToggle === true) {
var newToggle = document.createElement('a');
newToggle.href = 'javascript:void(0)';
newToggle.className = 'collapse-toggle hidden-default collapsed';
newToggle.innerHTML = "[" + labelForToggleButton(true) + "" +
- "] Show hidden default items";
+ "] Show hidden undocumented items";
newToggle.onclick = function() {
if (hasClass(this, "collapsed")) {
removeClass(this, "collapsed");
@@ -2075,7 +2085,7 @@
}
}, true);
this.innerHTML = "[" + labelForToggleButton(false) +
- "] Hide default items"
+ "] Hide undocumented items"
} else {
addClass(this, "collapsed");
onEach(this.parentNode.getElementsByClassName("x"), function(x) {
@@ -2085,7 +2095,7 @@
}
}, true);
this.innerHTML = "[" + labelForToggleButton(true) +
- "] Show hidden default items";
+ "] Show hidden undocumented items";
}
};
e.insertBefore(newToggle, e.firstChild);
diff --git a/src/test/rustdoc/assoc-consts.rs b/src/test/rustdoc/assoc-consts.rs
index 9ace8714918..d4f8e614ad0 100644
--- a/src/test/rustdoc/assoc-consts.rs
+++ b/src/test/rustdoc/assoc-consts.rs
@@ -99,7 +99,7 @@ impl Qux for Bar {
/// Docs for QUX1 in impl.
const QUX1: i8 = 5;
// @has - '//*[@id="associatedconstant.QUX_DEFAULT0"]' 'const QUX_DEFAULT0: u16'
- // @has - '//*[@class="docblock hidden"]' "Docs for QUX_DEFAULT12 in trait."
+ // @has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT12 in trait."
const QUX_DEFAULT0: u16 = 6;
// @has - '//*[@id="associatedconstant.QUX_DEFAULT1"]' 'const QUX_DEFAULT1: i16'
// @has - '//*[@class="docblock"]' "Docs for QUX_DEFAULT1 in impl."
diff --git a/src/test/rustdoc/manual_impl.rs b/src/test/rustdoc/manual_impl.rs
index 54a8a764833..ea46dae4f83 100644
--- a/src/test/rustdoc/manual_impl.rs
+++ b/src/test/rustdoc/manual_impl.rs
@@ -74,7 +74,7 @@ fn c_method(&self) -> usize {
// @has manual_impl/struct.S3.html '//*[@class="trait"]' 'T'
// @has - '//*[@class="docblock"]' 'Docs associated with the S3 trait implementation.'
// @has - '//*[@class="docblock"]' 'Docs associated with the S3 trait b_method implementation.'
-// @has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+// @has - '//*[@class="docblock hidden"]' 'Docs associated with the trait a_method definition.'
pub struct S3(usize);
/// Docs associated with the S3 trait implementation.