@@ -20,7 +20,7 @@ use crate::{
20
20
path:: { ModPath , PathKind } ,
21
21
per_ns:: PerNs ,
22
22
visibility:: { RawVisibility , Visibility } ,
23
- AdtId , CrateId , EnumVariantId , LocalModuleId , ModuleDefId , ModuleId ,
23
+ AdtId , CrateId , EnumVariantId , LocalModuleId , ModuleDefId ,
24
24
} ;
25
25
26
26
#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
@@ -74,17 +74,6 @@ impl PerNs {
74
74
}
75
75
76
76
impl DefMap {
77
- pub ( super ) fn resolve_name_in_extern_prelude (
78
- & self ,
79
- db : & dyn DefDatabase ,
80
- name : & Name ,
81
- ) -> Option < ModuleId > {
82
- match self . block {
83
- Some ( _) => self . crate_root ( db) . def_map ( db) . data . extern_prelude . get ( name) . copied ( ) ,
84
- None => self . data . extern_prelude . get ( name) . copied ( ) ,
85
- }
86
- }
87
-
88
77
pub ( crate ) fn resolve_visibility (
89
78
& self ,
90
79
db : & dyn DefDatabase ,
@@ -204,15 +193,15 @@ impl DefMap {
204
193
PathKind :: DollarCrate ( krate) => {
205
194
if krate == self . krate {
206
195
cov_mark:: hit!( macro_dollar_crate_self) ;
207
- PerNs :: types ( self . crate_root ( db ) . into ( ) , Visibility :: Public )
196
+ PerNs :: types ( self . crate_root ( ) . into ( ) , Visibility :: Public )
208
197
} else {
209
198
let def_map = db. crate_def_map ( krate) ;
210
199
let module = def_map. module_id ( Self :: ROOT ) ;
211
200
cov_mark:: hit!( macro_dollar_crate_other) ;
212
201
PerNs :: types ( module. into ( ) , Visibility :: Public )
213
202
}
214
203
}
215
- PathKind :: Crate => PerNs :: types ( self . crate_root ( db ) . into ( ) , Visibility :: Public ) ,
204
+ PathKind :: Crate => PerNs :: types ( self . crate_root ( ) . into ( ) , Visibility :: Public ) ,
216
205
// plain import or absolute path in 2015: crate-relative with
217
206
// fallback to extern prelude (with the simplification in
218
207
// rust-lang/rust#57745)
@@ -453,6 +442,10 @@ impl DefMap {
453
442
} ;
454
443
455
444
let extern_prelude = || {
445
+ if self . block . is_some ( ) {
446
+ // Don't resolve extern prelude in block `DefMap`s.
447
+ return PerNs :: none ( ) ;
448
+ }
456
449
self . data
457
450
. extern_prelude
458
451
. get ( name)
@@ -479,13 +472,20 @@ impl DefMap {
479
472
) -> PerNs {
480
473
let from_crate_root = match self . block {
481
474
Some ( _) => {
482
- let def_map = self . crate_root ( db ) . def_map ( db) ;
475
+ let def_map = self . crate_root ( ) . def_map ( db) ;
483
476
def_map[ Self :: ROOT ] . scope . get ( name)
484
477
}
485
478
None => self [ Self :: ROOT ] . scope . get ( name) ,
486
479
} ;
487
480
let from_extern_prelude = || {
488
- self . resolve_name_in_extern_prelude ( db, name)
481
+ if self . block . is_some ( ) {
482
+ // Don't resolve extern prelude in block `DefMap`s.
483
+ return PerNs :: none ( ) ;
484
+ }
485
+ self . data
486
+ . extern_prelude
487
+ . get ( name)
488
+ . copied ( )
489
489
. map_or ( PerNs :: none ( ) , |it| PerNs :: types ( it. into ( ) , Visibility :: Public ) )
490
490
} ;
491
491
0 commit comments