about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAaron Hill <aa1ronham@gmail.com>2018-12-15 08:01:57 -0500
committerAaron Hill <aa1ronham@gmail.com>2019-02-01 09:43:55 -0500
commit09ff0bacef6dd6bc3854f5c0dafff09e3ae22c6e (patch)
treeead929882814988e46a0de1655871c8f02f160af
parent8b6f3ddf2347509f9ff90c34e48673a25624d6e5 (diff)
downloadrust-09ff0bacef6dd6bc3854f5c0dafff09e3ae22c6e.tar.gz
rust-09ff0bacef6dd6bc3854f5c0dafff09e3ae22c6e.zip
Fix emitting lint
-rw-r--r--src/librustc_privacy/Cargo.toml3
-rw-r--r--src/librustc_privacy/lib.rs46
2 files changed, 31 insertions, 18 deletions
diff --git a/src/librustc_privacy/Cargo.toml b/src/librustc_privacy/Cargo.toml
index 62eab40f3ec..dfc4e5b5db4 100644
--- a/src/librustc_privacy/Cargo.toml
+++ b/src/librustc_privacy/Cargo.toml
@@ -13,4 +13,5 @@ rustc = { path = "../librustc" }
 rustc_typeck = { path = "../librustc_typeck" }
 syntax = { path = "../libsyntax" }
 syntax_pos = { path = "../libsyntax_pos" }
-rustc_data_structures = { path = "../librustc_data_structures" }
\ No newline at end of file
+rustc_data_structures = { path = "../librustc_data_structures" }
+log = "0.4"
diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs
index c7cdb30521b..ce0a4a65482 100644
--- a/src/librustc_privacy/lib.rs
+++ b/src/librustc_privacy/lib.rs
@@ -9,6 +9,7 @@
 
 #[macro_use] extern crate rustc;
 #[macro_use] extern crate syntax;
+#[macro_use] extern crate log;
 extern crate rustc_typeck;
 extern crate syntax_pos;
 extern crate rustc_data_structures;
@@ -1451,6 +1452,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ObsoleteVisiblePrivateTypesVisitor<'a, 'tcx> {
 
 struct SearchInterfaceForPrivateItemsVisitor<'a, 'tcx: 'a> {
     tcx: TyCtxt<'a, 'tcx, 'tcx>,
+    item_id: ast::NodeId,
     item_def_id: DefId,
     span: Span,
     /// The visitor checks that each component type is at least this visible.
@@ -1516,16 +1518,18 @@ impl<'a, 'tcx: 'a> SearchInterfaceForPrivateItemsVisitor<'a, 'tcx> {
                                    &format!("{} (error {})", msg, err_code));
             }
 
-            if self.leaks_private_dep(trait_ref.def_id) {
-                self.tcx.lint_node(lint::builtin::LEAKED_PRIVATE_DEPENDENCY,
-                                   node_id,
-                                   self.span,
-                                   &format!("trait `{}` from private dependency '{}' in public \
-                                             interface", trait_ref,
-                                             trait_ref.def_id.krate));
+        }
+
+        if self.leaks_private_dep(trait_ref.def_id) {
+            self.tcx.lint_node(lint::builtin::LEAKED_PRIVATE_DEPENDENCY,
+                               self.item_id,
+                               self.span,
+                               &format!("trait `{}` from private dependency '{}' in public \
+                                         interface", trait_ref,
+                                         self.tcx.crate_name(trait_ref.def_id.krate)));
 
-            }
         }
+
     }
 
     /// An item is 'leaked' from a private dependency if all
@@ -1537,9 +1541,13 @@ impl<'a, 'tcx: 'a> SearchInterfaceForPrivateItemsVisitor<'a, 'tcx> {
         if !self.tcx.features().public_private_dependencies {
             return false
         }
-        self.required_visibility == ty::Visibility::Public &&
+        let ret = self.required_visibility == ty::Visibility::Public &&
             !item_id.is_local() &&
-            !self.public_crates.contains(&item_id.krate)
+            !self.public_crates.contains(&item_id.krate);
+
+
+        debug!("leaks_private_dep(item_id={:?})={}", item_id, ret);
+        return ret;
     }
 }
 
@@ -1601,14 +1609,17 @@ impl<'a, 'tcx: 'a> TypeVisitor<'tcx> for SearchInterfaceForPrivateItemsVisitor<'
                     }
                 }
 
-                if self.leaks_private_dep(def_id) {
-                    self.tcx.lint_node(lint::builtin::LEAKED_PRIVATE_DEPENDENCY,
-                                       node_id,
-                                       self.span,
-                                       &format!("type '{}' from private dependency '{}' in \
-                                                public interface", ty, def_id.krate));
-                }
             }
+
+            if self.leaks_private_dep(def_id) {
+                self.tcx.lint_node(lint::builtin::LEAKED_PRIVATE_DEPENDENCY,
+                                   self.item_id,
+                                   self.span,
+                                   &format!("type '{}' from private dependency '{}' in \
+                                            public interface", ty,
+                                            self.tcx.crate_name(def_id.krate)));
+            }
+
         }
 
         ty.super_visit_with(self)
@@ -1673,6 +1684,7 @@ impl<'a, 'tcx> PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> {
 
         SearchInterfaceForPrivateItemsVisitor {
             tcx: self.tcx,
+            item_id,
             item_def_id: self.tcx.hir().local_def_id(item_id),
             span: self.tcx.hir().span(item_id),
             required_visibility,