Skip to content

Commit 298346d

Browse files
committed
Improve detection of unused imports
1 parent 18c1781 commit 298346d

File tree

9 files changed

+24
-18
lines changed

9 files changed

+24
-18
lines changed

src/librustc/middle/region.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use front::map as ast_map;
2020
use session::Session;
2121
use util::nodemap::{FnvHashMap, NodeMap, NodeSet};
2222
use middle::cstore::InlinedItem;
23-
use middle::ty::{self, Ty};
23+
use middle::ty;
2424

2525
use std::cell::RefCell;
2626
use std::collections::hash_map::Entry;

src/librustc_lint/types.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ use std::{i8, i16, i32, i64, u8, u16, u32, u64, f32, f64};
2626
use syntax::{abi, ast};
2727
use syntax::attr::{self, AttrMetaMethods};
2828
use syntax::codemap::{self, Span};
29-
use syntax::ast::{TyIs, TyUs, TyI8, TyU8, TyI16, TyU16, TyI32, TyU32, TyI64, TyU64};
3029

3130
use rustc_front::hir;
3231
use rustc_front::intravisit::{self, Visitor};

src/librustc_resolve/lib.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,7 +1249,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
12491249
// modules as we go.
12501250
while index < module_path_len {
12511251
let name = module_path[index];
1252-
match self.resolve_name_in_module(search_module, name, TypeNS, false) {
1252+
match self.resolve_name_in_module(search_module, name, TypeNS, false, true) {
12531253
Failed(None) => {
12541254
let segment_name = name.as_str();
12551255
let module_name = module_to_string(search_module);
@@ -1487,7 +1487,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
14871487
}
14881488

14891489
// Resolve the name in the parent module.
1490-
match self.resolve_name_in_module(search_module, name, namespace, true) {
1490+
match self.resolve_name_in_module(search_module, name, namespace, true, record_used) {
14911491
Failed(Some((span, msg))) => {
14921492
resolve_error(self, span, ResolutionError::FailedToResolve(&*msg));
14931493
}
@@ -1612,7 +1612,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
16121612
module_: Module<'a>,
16131613
name: Name,
16141614
namespace: Namespace,
1615-
allow_private_imports: bool)
1615+
allow_private_imports: bool,
1616+
record_used: bool)
16161617
-> ResolveResult<(Target<'a>, bool)> {
16171618
debug!("(resolving name in module) resolving `{}` in `{}`",
16181619
name,
@@ -1641,11 +1642,13 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
16411642
Some(target) => {
16421643
debug!("(resolving name in module) resolved to import");
16431644
// track used imports and extern crates as well
1644-
let id = import_resolution.id;
1645-
self.used_imports.insert((id, namespace));
1646-
self.record_import_use(id, name);
1647-
if let Some(DefId{krate: kid, ..}) = target.target_module.def_id() {
1648-
self.used_crates.insert(kid);
1645+
if record_used {
1646+
let id = import_resolution.id;
1647+
self.used_imports.insert((id, namespace));
1648+
self.record_import_use(id, name);
1649+
if let Some(DefId{krate: kid, ..}) = target.target_module.def_id() {
1650+
self.used_crates.insert(kid);
1651+
}
16491652
}
16501653
return Success((target, true));
16511654
}
@@ -2967,7 +2970,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
29672970
}
29682971

29692972
let name = segments.last().unwrap().identifier.name;
2970-
let def = match self.resolve_name_in_module(containing_module, name, namespace, false) {
2973+
let result = self.resolve_name_in_module(containing_module, name, namespace, false, true);
2974+
let def = match result {
29712975
Success((Target { binding, .. }, _)) => {
29722976
let (def, lp) = binding.def_and_lp();
29732977
(def, last_private.or(lp))
@@ -3026,7 +3030,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
30263030
}
30273031

30283032
let name = segments.last().unwrap().identifier.name;
3029-
match self.resolve_name_in_module(containing_module, name, namespace, false) {
3033+
match self.resolve_name_in_module(containing_module, name, namespace, false, true) {
30303034
Success((Target { binding, .. }, _)) => {
30313035
let (def, lp) = binding.def_and_lp();
30323036
Some((def, last_private.or(lp)))
@@ -3068,6 +3072,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
30683072
if let Success((target, _)) = self.resolve_name_in_module(module,
30693073
ident.unhygienic_name,
30703074
namespace,
3075+
true,
30713076
true) {
30723077
if let Some(def) = target.binding.def() {
30733078
return Some(LocalDef::from_def(def));

src/librustc_trans/trans/debuginfo/metadata.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use llvm::debuginfo::{DIType, DIFile, DIScope, DIDescriptor, DICompositeType};
2626
use middle::def_id::DefId;
2727
use middle::infer;
2828
use middle::pat_util;
29-
use middle::subst::{self, Substs};
29+
use middle::subst;
3030
use rustc::front::map as hir_map;
3131
use rustc_front::hir;
3232
use trans::{type_of, adt, machine, monomorphize};

src/librustc_trans/trans/debuginfo/type_names.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use super::namespace::crate_root_namespace;
1515
use trans::common::CrateContext;
1616
use middle::def_id::DefId;
1717
use middle::infer;
18-
use middle::subst::{self, Substs};
18+
use middle::subst;
1919
use middle::ty::{self, Ty};
2020

2121
use rustc_front::hir;

src/librustc_typeck/check/cast.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ use middle::ty::cast::{CastKind, CastTy};
5050
use syntax::codemap::Span;
5151
use rustc_front::hir;
5252
use syntax::ast;
53-
use syntax::ast::UintTy::TyU8;
5453

5554

5655
/// Reifies a cast check to be checked once we have full type information for

src/librustc_typeck/check/method/suggest.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use astconv::AstConv;
1717
use check::{self, FnCtxt};
1818
use front::map as hir_map;
1919
use middle::ty::{self, Ty, ToPolyTraitRef, ToPredicate, TypeFoldable};
20-
use middle::cstore::{self, CrateStore, DefLike};
20+
use middle::cstore::{self, CrateStore};
2121
use middle::def::Def;
2222
use middle::def_id::DefId;
2323
use middle::lang_items::FnOnceTraitLangItem;

src/librustc_typeck/check/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ use middle::infer;
9292
use middle::infer::{TypeOrigin, type_variable};
9393
use middle::pat_util::{self, pat_id_map};
9494
use middle::privacy::{AllPublic, LastMod};
95-
use middle::subst::{self, Subst, Substs, VecPerParamSpace, ParamSpace, TypeSpace};
95+
use middle::subst::{self, Subst, Substs, VecPerParamSpace, ParamSpace};
9696
use middle::traits::{self, report_fulfillment_errors};
9797
use middle::ty::{GenericPredicates, TypeScheme};
9898
use middle::ty::{Disr, ParamTy, ParameterEnvironment};

src/test/compile-fail/lint-unused-imports.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ mod bar {
5656
use foo::Point;
5757
use foo::Square; //~ ERROR unused import
5858
pub fn cc(_p: Point) -> super::Square {
59-
super::Square
59+
fn f() -> super::Square {
60+
super::Square
61+
}
62+
f()
6063
}
6164
}
6265

0 commit comments

Comments
 (0)