From 0aaefff0096b04d46b9502508ec4c935ed10ae25 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Tue, 22 Jun 2021 11:16:59 +0800 Subject: [PATCH] Account for more cases --- src/librustdoc/clean/inline.rs | 8 ++++---- .../rustdoc/auxiliary/cross-crate-hidden.rs | 3 +++ src/test/rustdoc/cross-crate-hidden.rs | 20 +++++++++++++++---- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index db2e0d0d241e..ab6254dcf10b 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -1,6 +1,5 @@ //! Support for inlining external documentation into the current AST. -use std::collections::VecDeque; use std::iter::once; use std::sync::Arc; @@ -425,15 +424,16 @@ crate fn build_impl( } // Return if the trait itself or any types of the generic parameters are doc(hidden). - let mut deque: VecDeque<&Type> = trait_.iter().collect(); - while let Some(ty) = deque.pop_back() { + let mut stack: Vec<&Type> = trait_.iter().collect(); + stack.push(&for_); + while let Some(ty) = stack.pop() { if let Some(did) = ty.def_id() { if cx.tcx.get_attrs(did).lists(sym::doc).has_word(sym::hidden) { return; } } if let Some(generics) = ty.generics() { - deque.extend(generics); + stack.extend(generics); } } diff --git a/src/test/rustdoc/auxiliary/cross-crate-hidden.rs b/src/test/rustdoc/auxiliary/cross-crate-hidden.rs index ec0ced2a82d0..15953122280f 100644 --- a/src/test/rustdoc/auxiliary/cross-crate-hidden.rs +++ b/src/test/rustdoc/auxiliary/cross-crate-hidden.rs @@ -1,2 +1,5 @@ #[doc(hidden)] pub enum HiddenType {} + +#[doc(hidden)] +pub trait HiddenTrait {} diff --git a/src/test/rustdoc/cross-crate-hidden.rs b/src/test/rustdoc/cross-crate-hidden.rs index b1bfc7c49bff..e3e7506d9d37 100644 --- a/src/test/rustdoc/cross-crate-hidden.rs +++ b/src/test/rustdoc/cross-crate-hidden.rs @@ -4,7 +4,7 @@ // aux-build:cross-crate-hidden.rs extern crate cross_crate_hidden; -pub use ::cross_crate_hidden::HiddenType; // OK, not re-exported +pub use ::cross_crate_hidden::{HiddenType, HiddenTrait}; // OK, not re-exported pub enum MyLibType {} @@ -15,9 +15,21 @@ impl From for MyLibType { } } -// @!has foo/enum.MyLibType.html '//*[@id="impl-From%3COption%3COption%3COption%3COption%3CHiddenType%3E%3E%3E%3E%3E"]' 'impl From>>>> for MyLibType' -impl From>>>> for MyLibType { - fn from(it: Option>>>) -> MyLibType { +pub struct T(T); + +// @!has foo/enum.MyLibType.html '//*[@id="impl-From%3CT%3CT%3CT%3CT%3CHiddenType%3E%3E%3E%3E%3E"]' 'impl From>>>> for MyLibType' +impl From>>>> for MyLibType { + fn from(it: T>>>) -> MyLibType { todo!() } } + +// @!has foo/enum.MyLibType.html '//*[@id="impl-HiddenTrait"]' 'impl HiddenTrait for MyLibType' +impl HiddenTrait for MyLibType {} + +// @!has foo/struct.T.html '//*[@id="impl-From%3CMyLibType%3E"]' 'impl From for T>>>' +impl From for T>>> { + fn from(it: MyLibType) -> T>>> { + match it {} + } +}