From 661b7ce830c1d3313f0fd4456c0f55583711730c Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Sun, 7 Feb 2016 19:29:51 +0000 Subject: [PATCH] Make resolve_name_in_module solely responsible for tracking used crates in lib.rs --- src/librustc_resolve/lib.rs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 054aa1d5f55..3fcf14bbbcd 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1202,10 +1202,6 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { fn record_import_use(&mut self, name: Name, ns: Namespace, resolution: &ImportResolution<'a>) { let import_id = resolution.id; self.used_imports.insert((import_id, ns)); - match resolution.target.as_ref().and_then(|target| target.target_module.def_id()) { - Some(DefId { krate, .. }) => { self.used_crates.insert(krate); } - _ => {} - }; if !self.make_glob_map { return; @@ -1299,11 +1295,6 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { // Check to see whether there are type bindings, and, if // so, whether there is a module within. if let Some(module_def) = target.binding.module() { - // track extern crates for unused_extern_crate lint - if let Some(did) = module_def.def_id() { - self.used_crates.insert(did.krate); - } - search_module = module_def; // Keep track of the closest private module used @@ -1573,6 +1564,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { if let Some(binding) = module_.get_child(name, namespace) { debug!("(resolving name in module) found node as child"); + if binding.is_extern_crate() { + // track the extern crate as used. + if let Some(DefId { krate, .. }) = binding.module().unwrap().def_id() { + self.used_crates.insert(krate); + } + } return Success((Target::new(module_, binding, Shadowable::Never), false)); } @@ -2923,9 +2920,6 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { } _ => return None, }; - if let Some(DefId{krate: kid, ..}) = containing_module.def_id() { - self.used_crates.insert(kid); - } return Some(def); }