@@ -1463,7 +1463,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1463
1463
fn resolve_item_in_lexical_scope ( & mut self ,
1464
1464
module_ : Rc < Module > ,
1465
1465
name : Name ,
1466
- namespace : Namespace )
1466
+ namespace : Namespace ,
1467
+ record_used : bool )
1467
1468
-> ResolveResult < ( Target , bool ) > {
1468
1469
debug ! ( "(resolving item in lexical scope) resolving `{}` in namespace {:?} in `{}`" ,
1469
1470
name,
@@ -1503,10 +1504,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1503
1504
debug ! ( "(resolving item in lexical scope) using import resolution" ) ;
1504
1505
// track used imports and extern crates as well
1505
1506
let id = import_resolution[ namespace] . id ;
1506
- self . used_imports . insert ( ( id, namespace) ) ;
1507
- self . record_import_use ( id, name) ;
1508
- if let Some ( DefId { krate : kid, ..} ) = target. target_module . def_id ( ) {
1509
- self . used_crates . insert ( kid) ;
1507
+ if record_used {
1508
+ self . used_imports . insert ( ( id, namespace) ) ;
1509
+ self . record_import_use ( id, name) ;
1510
+ if let Some ( DefId { krate : kid, ..} ) = target. target_module . def_id ( ) {
1511
+ self . used_crates . insert ( kid) ;
1512
+ }
1510
1513
}
1511
1514
return Success ( ( target, false ) ) ;
1512
1515
}
@@ -1583,7 +1586,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1583
1586
-> ResolveResult < Rc < Module > > {
1584
1587
// If this module is an anonymous module, resolve the item in the
1585
1588
// lexical scope. Otherwise, resolve the item from the crate root.
1586
- let resolve_result = self . resolve_item_in_lexical_scope ( module_, name, TypeNS ) ;
1589
+ let resolve_result = self . resolve_item_in_lexical_scope ( module_, name, TypeNS , true ) ;
1587
1590
match resolve_result {
1588
1591
Success ( ( target, _) ) => {
1589
1592
if let Some ( module_def) = target. binding . module ( ) {
@@ -2791,7 +2794,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2791
2794
span : Span )
2792
2795
-> BareIdentifierPatternResolution {
2793
2796
let module = self . current_module . clone ( ) ;
2794
- match self . resolve_item_in_lexical_scope ( module, name, ValueNS ) {
2797
+ match self . resolve_item_in_lexical_scope ( module, name, ValueNS , true ) {
2795
2798
Success ( ( target, _) ) => {
2796
2799
debug ! ( "(resolve bare identifier pattern) succeeded in finding {} at {:?}" ,
2797
2800
name,
@@ -2899,17 +2902,16 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2899
2902
}
2900
2903
2901
2904
// Try to find a path to an item in a module.
2902
- let unqualified_def = self . resolve_identifier ( segments. last ( ) . unwrap ( ) . identifier ,
2903
- namespace,
2904
- check_ribs) ;
2905
-
2905
+ let last_ident = segments. last ( ) . unwrap ( ) . identifier ;
2906
2906
if segments. len ( ) <= 1 {
2907
+ let unqualified_def = self . resolve_identifier ( last_ident, namespace, check_ribs, true ) ;
2907
2908
return unqualified_def. and_then ( |def| self . adjust_local_def ( def, span) )
2908
2909
. map ( |def| {
2909
2910
PathResolution :: new ( def, LastMod ( AllPublic ) , path_depth)
2910
2911
} ) ;
2911
2912
}
2912
2913
2914
+ let unqualified_def = self . resolve_identifier ( last_ident, namespace, check_ribs, false ) ;
2913
2915
let def = self . resolve_module_relative_path ( span, segments, namespace) ;
2914
2916
match ( def, unqualified_def) {
2915
2917
( Some ( ( ref d, _) ) , Some ( ref ud) ) if * d == ud. def => {
@@ -2929,7 +2931,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2929
2931
fn resolve_identifier ( & mut self ,
2930
2932
identifier : hir:: Ident ,
2931
2933
namespace : Namespace ,
2932
- check_ribs : bool )
2934
+ check_ribs : bool ,
2935
+ record_used : bool )
2933
2936
-> Option < LocalDef > {
2934
2937
// First, check to see whether the name is a primitive type.
2935
2938
if namespace == TypeNS {
@@ -2946,7 +2949,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2946
2949
}
2947
2950
}
2948
2951
2949
- self . resolve_item_by_name_in_lexical_scope ( identifier. unhygienic_name , namespace)
2952
+ let name = identifier. unhygienic_name ;
2953
+ self . resolve_item_by_name_in_lexical_scope ( name, namespace, record_used)
2950
2954
. map ( LocalDef :: from_def)
2951
2955
}
2952
2956
@@ -3197,11 +3201,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
3197
3201
3198
3202
fn resolve_item_by_name_in_lexical_scope ( & mut self ,
3199
3203
name : Name ,
3200
- namespace : Namespace )
3204
+ namespace : Namespace ,
3205
+ record_used : bool )
3201
3206
-> Option < Def > {
3202
3207
// Check the items.
3203
3208
let module = self . current_module . clone ( ) ;
3204
- match self . resolve_item_in_lexical_scope ( module, name, namespace) {
3209
+ match self . resolve_item_in_lexical_scope ( module, name, namespace, record_used ) {
3205
3210
Success ( ( target, _) ) => {
3206
3211
match target. binding . def ( ) {
3207
3212
None => {
0 commit comments