@@ -19,6 +19,7 @@ use metadata::cstore::find_extern_mod_stmt_cnum;
19
19
use metadata:: decoder:: { def_like, dl_def, dl_field, dl_impl} ;
20
20
use middle:: lang_items:: LanguageItems ;
21
21
use middle:: lint:: { deny, allow, forbid, level, unused_imports, warn} ;
22
+ use middle:: lint:: { get_lint_level, get_lint_settings_level} ;
22
23
use middle:: pat_util:: { pat_bindings} ;
23
24
24
25
use core:: cmp;
@@ -508,16 +509,6 @@ pub impl Module {
508
509
}
509
510
}
510
511
511
- pub fn unused_import_lint_level(session: Session) -> level {
512
- for session.opts.lint_opts.each |lint_option_pair| {
513
- let (lint_type, lint_level) = *lint_option_pair;
514
- if lint_type == unused_imports {
515
- return lint_level;
516
- }
517
- }
518
- return allow;
519
- }
520
-
521
512
// Records a possibly-private type definition.
522
513
pub struct TypeNsDef {
523
514
privacy: Privacy,
@@ -770,8 +761,6 @@ pub fn Resolver(session: Session,
770
761
771
762
graph_root: graph_root,
772
763
773
- unused_import_lint_level: unused_import_lint_level(session),
774
-
775
764
trait_info: @HashMap(),
776
765
structs: @HashMap(),
777
766
@@ -816,8 +805,6 @@ pub struct Resolver {
816
805
817
806
graph_root: @mut NameBindings,
818
807
819
- unused_import_lint_level: level,
820
-
821
808
trait_info: @HashMap<def_id,@HashMap<ident,()>>,
822
809
structs: @HashMap<def_id,()>,
823
810
@@ -5232,8 +5219,17 @@ pub impl Resolver {
5232
5219
// resolve data structures.
5233
5220
//
5234
5221
5222
+ fn unused_import_lint_level( @mut self , m: @mut Module ) -> level {
5223
+ let settings = self . session. lint_settings;
5224
+ match m. def_id {
5225
+ Some ( def) => get_lint_settings_level( settings, unused_imports,
5226
+ def. node, def. node) ,
5227
+ None => get_lint_level( settings. default_settings, unused_imports)
5228
+ }
5229
+ }
5230
+
5235
5231
fn check_for_unused_imports_if_necessary( @mut self ) {
5236
- if self . unused_import_lint_level == allow {
5232
+ if self . unused_import_lint_level( self . current_module ) == allow {
5237
5233
return ;
5238
5234
}
5239
5235
@@ -5285,12 +5281,15 @@ pub impl Resolver {
5285
5281
for module_. import_resolutions. each_value |& import_resolution| {
5286
5282
// Ignore dummy spans for things like automatically injected
5287
5283
// imports for the prelude, and also don't warn about the same
5288
- // import statement being unused more than once.
5284
+ // import statement being unused more than once. Furthermore, if
5285
+ // the import is public, then we can't be sure whether it's unused
5286
+ // or not so don't warn about it.
5289
5287
if !import_resolution. state. used &&
5290
5288
!import_resolution. state. warned &&
5291
- import_resolution. span != dummy_sp( ) {
5289
+ import_resolution. span != dummy_sp( ) &&
5290
+ import_resolution. privacy != Public {
5292
5291
import_resolution. state. warned = true ;
5293
- match self . unused_import_lint_level {
5292
+ match self . unused_import_lint_level( module_ ) {
5294
5293
warn => {
5295
5294
self . session. span_warn( copy import_resolution. span,
5296
5295
~"unused import") ;
@@ -5299,11 +5298,7 @@ pub impl Resolver {
5299
5298
self . session. span_err( copy import_resolution. span,
5300
5299
~"unused import") ;
5301
5300
}
5302
- allow => {
5303
- self . session. span_bug( copy import_resolution. span,
5304
- ~"shouldn' t be here if lint \
5305
- is allowed") ;
5306
- }
5301
+ allow => ( )
5307
5302
}
5308
5303
}
5309
5304
}
0 commit comments