about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorDavid Creswick <dcrewi@gyrae.net>2013-11-11 22:17:47 -0600
committerDavid Creswick <dcrewi@gyrae.net>2013-11-13 11:31:59 -0600
commit1f7eb4f9aae43cb1177e2cf67a799a63b911ea78 (patch)
tree0e17edd4ee83da9638cb94025d172fc414fe4bee /src/libsyntax
parent4d9b95fada7c97ac1c63099bab1d45ba120958ec (diff)
downloadrust-1f7eb4f9aae43cb1177e2cf67a799a63b911ea78.tar.gz
rust-1f7eb4f9aae43cb1177e2cf67a799a63b911ea78.zip
make missing_doc lint respect the visibility rules
Previously, the `exported_items` set created by the privacy pass was
incomplete. Specifically, it did not include items that had been defined
at a private path but then `pub use`d at a public path. This commit
finds all crate exports during the privacy pass. Consequently, some code
in the reachable pass and in rustdoc is no longer necessary. This commit
then removes the separate `MissingDocLintVisitor` lint pass, opting to
check missing_doc lint in the same pass as the other lint checkers using
the visibility result computed by the privacy pass.

Fixes #9777.
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/visit.rs32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs
index 60127be87b6..a195bfb7717 100644
--- a/src/libsyntax/visit.rs
+++ b/src/libsyntax/visit.rs
@@ -90,6 +90,7 @@ pub trait Visitor<E:Clone> {
         walk_struct_def(self, s, i, g, n, e)
     }
     fn visit_struct_field(&mut self, s:@struct_field, e:E) { walk_struct_field(self, s, e) }
+    fn visit_variant(&mut self, v:&variant, g:&Generics, e:E) { walk_variant(self, v, g, e) }
     fn visit_opt_lifetime_ref(&mut self,
                               _span: Span,
                               opt_lifetime: &Option<Lifetime>,
@@ -234,20 +235,27 @@ pub fn walk_enum_def<E:Clone, V:Visitor<E>>(visitor: &mut V,
                                generics: &Generics,
                                env: E) {
     for variant in enum_definition.variants.iter() {
-        match variant.node.kind {
-            tuple_variant_kind(ref variant_arguments) => {
-                for variant_argument in variant_arguments.iter() {
-                    visitor.visit_ty(&variant_argument.ty, env.clone())
-                }
-            }
-            struct_variant_kind(struct_definition) => {
-                visitor.visit_struct_def(struct_definition,
-                                         variant.node.name,
-                                         generics,
-                                         variant.node.id,
-                                         env.clone())
+        visitor.visit_variant(variant, generics, env.clone());
+    }
+}
+
+pub fn walk_variant<E:Clone, V:Visitor<E>>(visitor:&mut V,
+                                           variant: &variant,
+                                           generics: &Generics,
+                                           env: E) {
+    match variant.node.kind {
+        tuple_variant_kind(ref variant_arguments) => {
+            for variant_argument in variant_arguments.iter() {
+                visitor.visit_ty(&variant_argument.ty, env.clone())
             }
         }
+        struct_variant_kind(struct_definition) => {
+            visitor.visit_struct_def(struct_definition,
+                                     variant.node.name,
+                                     generics,
+                                     variant.node.id,
+                                     env.clone())
+        }
     }
 }