From eae9f4636cda0b1f9b2c23afbb03deccdb0b8ad1 Mon Sep 17 00:00:00 2001 From: mitaa Date: Fri, 26 Feb 2016 01:45:24 +0100 Subject: [PATCH] Don't inline impls from `doc(hidden)` modules --- src/librustdoc/clean/inline.rs | 27 ++++++++++++++++----------- src/test/auxiliary/issue-29584.rs | 18 ++++++++++++++++++ src/test/rustdoc/issue-29584.rs | 18 ++++++++++++++++++ 3 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 src/test/auxiliary/issue-29584.rs create mode 100644 src/test/rustdoc/issue-29584.rs diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 9eac2fd41fa1e..8f87826476979 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -260,6 +260,11 @@ pub fn build_impls(cx: &DocContext, tcx: &ty::ctxt, match def { cstore::DlImpl(did) => build_impl(cx, tcx, did, impls), cstore::DlDef(Def::Mod(did)) => { + // Don't recurse if this is a #[doc(hidden)] module + if load_attrs(cx, tcx, did).iter().any(|a| is_doc_hidden(a)) { + return; + } + for item in tcx.sess.cstore.item_children(did) { populate_impls(cx, tcx, item.def, impls) } @@ -423,19 +428,19 @@ pub fn build_impl(cx: &DocContext, deprecation: stability::lookup_deprecation(tcx, did).clean(cx), def_id: did, }); +} - fn is_doc_hidden(a: &clean::Attribute) -> bool { - match *a { - clean::List(ref name, ref inner) if *name == "doc" => { - inner.iter().any(|a| { - match *a { - clean::Word(ref s) => *s == "hidden", - _ => false, - } - }) - } - _ => false +fn is_doc_hidden(a: &clean::Attribute) -> bool { + match *a { + clean::List(ref name, ref inner) if *name == "doc" => { + inner.iter().any(|a| { + match *a { + clean::Word(ref s) => *s == "hidden", + _ => false, + } + }) } + _ => false } } diff --git a/src/test/auxiliary/issue-29584.rs b/src/test/auxiliary/issue-29584.rs new file mode 100644 index 0000000000000..4a9e6126fc602 --- /dev/null +++ b/src/test/auxiliary/issue-29584.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub struct Foo; + +#[doc(hidden)] +mod bar { + trait Bar {} + + impl Bar for ::Foo {} +} diff --git a/src/test/rustdoc/issue-29584.rs b/src/test/rustdoc/issue-29584.rs new file mode 100644 index 0000000000000..0b5ef7fca8e4c --- /dev/null +++ b/src/test/rustdoc/issue-29584.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// aux-build:issue-29584.rs +// ignore-cross-compile + +extern crate issue_29584; + +// @has issue_29584/struct.Foo.html +// @!has - 'impl Bar for' +pub use issue_29584::Foo;