]> git.lizzy.rs Git - rust.git/commitdiff
rustdoc: Make strip_hidden use a dedicated hidden item if any.
authorKang Seonghoon <public+git@mearie.org>
Mon, 28 Apr 2014 18:59:48 +0000 (03:59 +0900)
committerKang Seonghoon <public+git@mearie.org>
Mon, 28 Apr 2014 19:01:55 +0000 (04:01 +0900)
fixes #13806.

src/librustdoc/clean.rs
src/librustdoc/passes.rs

index cabfb05cb6f2fc0f478b56a27404bf744747a071..cabfe695df714ab255cd198acfe2e2e031b741b2 100644 (file)
@@ -152,6 +152,21 @@ pub fn doc_value<'a>(&'a self) -> Option<&'a str> {
         return None;
     }
 
+    pub fn is_hidden_from_doc(&self) -> bool {
+        match self.doc_list() {
+            Some(ref l) => {
+                for innerattr in l.iter() {
+                    match *innerattr {
+                        Word(ref s) if "hidden" == *s => return true,
+                        _ => (),
+                    }
+                }
+            },
+            None => ()
+        }
+        return false;
+    }
+
     pub fn is_mod(&self) -> bool {
         match self.inner { ModuleItem(..) => true, _ => false }
     }
@@ -736,7 +751,7 @@ fn clean(&self) -> Type {
 
 #[deriving(Clone, Encodable, Decodable)]
 pub enum StructField {
-    HiddenStructField,
+    HiddenStructField, // inserted later by strip passes
     TypedStructField(Type),
 }
 
index 9b6d04f2ca44297652e9810bdb1996a23f4e855b..f8a2382c0282625a4424b7bc1dc4db92950434dd 100644 (file)
@@ -33,23 +33,24 @@ struct Stripper<'a> {
         };
         impl<'a> fold::DocFolder for Stripper<'a> {
             fn fold_item(&mut self, i: Item) -> Option<Item> {
-                for attr in i.attrs.iter() {
-                    match attr {
-                        &clean::List(ref x, ref l) if "doc" == *x => {
-                            for innerattr in l.iter() {
-                                match innerattr {
-                                    &clean::Word(ref s) if "hidden" == *s => {
-                                        debug!("found one in strip_hidden; removing");
-                                        self.stripped.insert(i.id);
-                                        return None;
-                                    },
-                                    _ => (),
-                                }
-                            }
-                        },
-                        _ => ()
+                if i.is_hidden_from_doc() {
+                    debug!("found one in strip_hidden; removing");
+                    self.stripped.insert(i.id);
+
+                    // use a dedicated hidden item for given item type if any
+                    match i.inner {
+                        clean::StructFieldItem(..) => {
+                            return Some(clean::Item {
+                                inner: clean::StructFieldItem(clean::HiddenStructField),
+                                ..i
+                            });
+                        }
+                        _ => {
+                            return None;
+                        }
                     }
                 }
+
                 self.fold_item_recur(i)
             }
         }