@@ -24,9 +24,13 @@ pub const STRIP_HIDDEN: Pass =
2424 "strips all doc(hidden) items from the output" ) ;
2525
2626/// Strip items marked `#[doc(hidden)]`
27- pub fn strip_hidden ( krate : clean:: Crate , _ : & DocContext ) -> clean:: Crate {
27+ pub fn strip_hidden ( mut krate : clean:: Crate , cx : & DocContext ) -> clean:: Crate {
2828 let mut retained = DefIdSet ( ) ;
2929
30+ // as an early pass, the external traits haven't been swapped in, so we need to do that ahead
31+ // of time
32+ mem:: swap ( & mut krate. external_traits , & mut cx. external_traits . borrow_mut ( ) ) ;
33+
3034 // strip all #[doc(hidden)] items
3135 let krate = {
3236 let mut stripper = Stripper { retained : & mut retained, update_retained : true } ;
@@ -35,7 +39,10 @@ pub fn strip_hidden(krate: clean::Crate, _: &DocContext) -> clean::Crate {
3539
3640 // strip all impls referencing stripped items
3741 let mut stripper = ImplStripper { retained : & retained } ;
38- stripper. fold_crate ( krate)
42+ let mut krate = stripper. fold_crate ( krate) ;
43+ mem:: swap ( & mut krate. external_traits , & mut cx. external_traits . borrow_mut ( ) ) ;
44+
45+ krate
3946}
4047
4148struct Stripper < ' a > {
@@ -46,7 +53,7 @@ struct Stripper<'a> {
4653impl < ' a > fold:: DocFolder for Stripper < ' a > {
4754 fn fold_item ( & mut self , i : Item ) -> Option < Item > {
4855 if i. attrs . lists ( "doc" ) . has_word ( "hidden" ) {
49- debug ! ( "found one in strip_hidden; removing" ) ;
56+ debug ! ( "strip_hidden: stripping {} {:?}" , i . type_ ( ) , i . name ) ;
5057 // use a dedicated hidden item for given item type if any
5158 match i. inner {
5259 clean:: StructFieldItem ( ..) | clean:: ModuleItem ( ..) => {
0 commit comments