@@ -1462,7 +1462,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1462
1462
fn resolve_item_in_lexical_scope ( & mut self ,
1463
1463
module_ : Rc < Module > ,
1464
1464
name : Name ,
1465
- namespace : Namespace )
1465
+ namespace : Namespace ,
1466
+ record_used : bool )
1466
1467
-> ResolveResult < ( Target , bool ) > {
1467
1468
debug ! ( "(resolving item in lexical scope) resolving `{}` in namespace {:?} in `{}`" ,
1468
1469
name,
@@ -1502,10 +1503,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1502
1503
debug ! ( "(resolving item in lexical scope) using import resolution" ) ;
1503
1504
// track used imports and extern crates as well
1504
1505
let id = import_resolution[ namespace] . id ;
1505
- self . used_imports . insert ( ( id, namespace) ) ;
1506
- self . record_import_use ( id, name) ;
1507
- if let Some ( DefId { krate : kid, ..} ) = target. target_module . def_id ( ) {
1508
- self . used_crates . insert ( kid) ;
1506
+ if record_used {
1507
+ self . used_imports . insert ( ( id, namespace) ) ;
1508
+ self . record_import_use ( id, name) ;
1509
+ if let Some ( DefId { krate : kid, ..} ) = target. target_module . def_id ( ) {
1510
+ self . used_crates . insert ( kid) ;
1511
+ }
1509
1512
}
1510
1513
return Success ( ( target, false ) ) ;
1511
1514
}
@@ -1582,7 +1585,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
1582
1585
-> ResolveResult < Rc < Module > > {
1583
1586
// If this module is an anonymous module, resolve the item in the
1584
1587
// lexical scope. Otherwise, resolve the item from the crate root.
1585
- let resolve_result = self . resolve_item_in_lexical_scope ( module_, name, TypeNS ) ;
1588
+ let resolve_result = self . resolve_item_in_lexical_scope ( module_, name, TypeNS , true ) ;
1586
1589
match resolve_result {
1587
1590
Success ( ( target, _) ) => {
1588
1591
if let Some ( module_def) = target. binding . module ( ) {
@@ -2776,7 +2779,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2776
2779
span : Span )
2777
2780
-> BareIdentifierPatternResolution {
2778
2781
let module = self . current_module . clone ( ) ;
2779
- match self . resolve_item_in_lexical_scope ( module, name, ValueNS ) {
2782
+ match self . resolve_item_in_lexical_scope ( module, name, ValueNS , true ) {
2780
2783
Success ( ( target, _) ) => {
2781
2784
debug ! ( "(resolve bare identifier pattern) succeeded in finding {} at {:?}" ,
2782
2785
name,
@@ -2884,17 +2887,16 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2884
2887
}
2885
2888
2886
2889
// Try to find a path to an item in a module.
2887
- let unqualified_def = self . resolve_identifier ( segments. last ( ) . unwrap ( ) . identifier ,
2888
- namespace,
2889
- check_ribs) ;
2890
-
2890
+ let last_ident = segments. last ( ) . unwrap ( ) . identifier ;
2891
2891
if segments. len ( ) <= 1 {
2892
+ let unqualified_def = self . resolve_identifier ( last_ident, namespace, check_ribs, true ) ;
2892
2893
return unqualified_def. and_then ( |def| self . adjust_local_def ( def, span) )
2893
2894
. map ( |def| {
2894
2895
PathResolution :: new ( def, LastMod ( AllPublic ) , path_depth)
2895
2896
} ) ;
2896
2897
}
2897
2898
2899
+ let unqualified_def = self . resolve_identifier ( last_ident, namespace, check_ribs, false ) ;
2898
2900
let def = self . resolve_module_relative_path ( span, segments, namespace) ;
2899
2901
match ( def, unqualified_def) {
2900
2902
( Some ( ( ref d, _) ) , Some ( ref ud) ) if * d == ud. def => {
@@ -2914,7 +2916,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2914
2916
fn resolve_identifier ( & mut self ,
2915
2917
identifier : hir:: Ident ,
2916
2918
namespace : Namespace ,
2917
- check_ribs : bool )
2919
+ check_ribs : bool ,
2920
+ record_used : bool )
2918
2921
-> Option < LocalDef > {
2919
2922
// First, check to see whether the name is a primitive type.
2920
2923
if namespace == TypeNS {
@@ -2931,7 +2934,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
2931
2934
}
2932
2935
}
2933
2936
2934
- self . resolve_item_by_name_in_lexical_scope ( identifier. unhygienic_name , namespace)
2937
+ let name = identifier. unhygienic_name ;
2938
+ self . resolve_item_by_name_in_lexical_scope ( name, namespace, record_used)
2935
2939
. map ( LocalDef :: from_def)
2936
2940
}
2937
2941
@@ -3182,11 +3186,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
3182
3186
3183
3187
fn resolve_item_by_name_in_lexical_scope ( & mut self ,
3184
3188
name : Name ,
3185
- namespace : Namespace )
3189
+ namespace : Namespace ,
3190
+ record_used : bool )
3186
3191
-> Option < Def > {
3187
3192
// Check the items.
3188
3193
let module = self . current_module . clone ( ) ;
3189
- match self . resolve_item_in_lexical_scope ( module, name, namespace) {
3194
+ match self . resolve_item_in_lexical_scope ( module, name, namespace, record_used ) {
3190
3195
Success ( ( target, _) ) => {
3191
3196
match target. binding . def ( ) {
3192
3197
None => {
0 commit comments