@@ -24,9 +24,13 @@ pub const STRIP_HIDDEN: Pass =
24
24
"strips all doc(hidden) items from the output" ) ;
25
25
26
26
/// 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 {
28
28
let mut retained = DefIdSet ( ) ;
29
29
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
+
30
34
// strip all #[doc(hidden)] items
31
35
let krate = {
32
36
let mut stripper = Stripper { retained : & mut retained, update_retained : true } ;
@@ -35,7 +39,10 @@ pub fn strip_hidden(krate: clean::Crate, _: &DocContext) -> clean::Crate {
35
39
36
40
// strip all impls referencing stripped items
37
41
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
39
46
}
40
47
41
48
struct Stripper < ' a > {
@@ -46,7 +53,7 @@ struct Stripper<'a> {
46
53
impl < ' a > fold:: DocFolder for Stripper < ' a > {
47
54
fn fold_item ( & mut self , i : Item ) -> Option < Item > {
48
55
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 ) ;
50
57
// use a dedicated hidden item for given item type if any
51
58
match i. inner {
52
59
clean:: StructFieldItem ( ..) | clean:: ModuleItem ( ..) => {
0 commit comments