@@ -22,30 +22,62 @@ use fold::DocFolder;
2222
2323/// Strip items marked `#[doc(hidden)]`
2424pub fn strip_hidden ( krate : clean:: Crate ) -> plugins:: PluginResult {
25- struct Stripper ;
26- impl fold:: DocFolder for Stripper {
27- fn fold_item ( & mut self , i : Item ) -> Option < Item > {
28- for attr in i. attrs . iter ( ) {
29- match attr {
30- & clean:: List ( ~"doc", ref l) => {
31- for innerattr in l. iter ( ) {
32- match innerattr {
33- & clean:: Word ( ref s) if "hidden" == * s => {
34- debug ! ( "found one in strip_hidden; removing" ) ;
35- return None ;
36- } ,
37- _ => ( ) ,
25+ let mut stripped = HashSet :: new ( ) ;
26+
27+ // strip all #[doc(hidden)] items
28+ let krate = {
29+ struct Stripper < ' a > {
30+ stripped : & ' a mut HashSet < ast:: NodeId >
31+ } ;
32+ impl < ' a > fold:: DocFolder for Stripper < ' a > {
33+ fn fold_item ( & mut self , i : Item ) -> Option < Item > {
34+ for attr in i. attrs . iter ( ) {
35+ match attr {
36+ & clean:: List ( ~"doc", ref l) => {
37+ for innerattr in l. iter ( ) {
38+ match innerattr {
39+ & clean:: Word ( ref s) if "hidden" == * s => {
40+ debug ! ( "found one in strip_hidden; removing" ) ;
41+ self . stripped . insert ( i. id ) ;
42+ return None ;
43+ } ,
44+ _ => ( ) ,
45+ }
3846 }
47+ } ,
48+ _ => ( )
49+ }
50+ }
51+ self . fold_item_recur ( i)
52+ }
53+ }
54+ let mut stripper = Stripper { stripped : & mut stripped } ;
55+ stripper. fold_crate ( krate)
56+ } ;
57+
58+ // strip any traits implemented on stripped items
59+ let krate = {
60+ struct ImplStripper < ' a > {
61+ stripped : & ' a mut HashSet < ast:: NodeId >
62+ } ;
63+ impl < ' a > fold:: DocFolder for ImplStripper < ' a > {
64+ fn fold_item ( & mut self , i : Item ) -> Option < Item > {
65+ match i. inner {
66+ clean:: ImplItem ( clean:: Impl { for_ : clean:: ResolvedPath { id : for_id, .. } ,
67+ .. } ) => {
68+ if self . stripped . contains ( & for_id) {
69+ return None ;
3970 }
40- } ,
41- _ => ( )
71+ }
72+ _ => { }
4273 }
74+ self . fold_item_recur ( i)
4375 }
44- self . fold_item_recur ( i)
4576 }
46- }
47- let mut stripper = Stripper ;
48- let krate = stripper. fold_crate ( krate) ;
77+ let mut stripper = ImplStripper { stripped : & mut stripped } ;
78+ stripper. fold_crate ( krate)
79+ } ;
80+
4981 ( krate, None )
5082}
5183
0 commit comments