about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTom Jakubowski <tom@crystae.net>2014-10-07 08:36:55 -0700
committerTom Jakubowski <tom@crystae.net>2014-10-21 08:49:43 -0700
commit370c9c54c2e9b9a308b4fa2a48460e0d54794729 (patch)
treee5310cad7afeeb580889167a3ed0df56a20e578f
parentb69cd73b7bd448dbfde4cf074b73a4b8384cad38 (diff)
rustdoc: hide private traits in strip-private pass
Fix #16563
-rw-r--r--src/librustdoc/passes.rs13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/librustdoc/passes.rs b/src/librustdoc/passes.rs
index 1a9dd226f87..7c4d28d5adb 100644
--- a/src/librustdoc/passes.rs
+++ b/src/librustdoc/passes.rs
@@ -134,7 +134,18 @@ impl<'a> fold::DocFolder for Stripper<'a> {
             clean::StructItem(..) | clean::EnumItem(..) |
             clean::TraitItem(..) | clean::FunctionItem(..) |
             clean::VariantItem(..) | clean::MethodItem(..) |
-            clean::ForeignFunctionItem(..) | clean::ForeignStaticItem(..) |
+            clean::ForeignFunctionItem(..) | clean::ForeignStaticItem(..) => {
+                if ast_util::is_local(i.def_id) {
+                    if !self.exported_items.contains(&i.def_id.node) {
+                        return None;
+                    }
+                    // Traits are in exported_items even when they're totally private.
+                    if i.is_trait() && i.visibility != Some(ast::Public) {
+                        return None;
+                    }
+                }
+            }
+
             clean::ConstantItem(..) => {
                 if ast_util::is_local(i.def_id) &&
                    !self.exported_items.contains(&i.def_id.node) {