@@ -390,13 +390,14 @@ impl ItemMap {
390
390
original_module : Module ,
391
391
path : & Path ,
392
392
) -> ( PerNs < ModuleDef > , ReachedFixedPoint ) {
393
- let mut segments = path. segments . iter ( ) . enumerate ( ) ;
393
+ let mut segments = path. segments . iter ( ) ;
394
+ // Handle crate/self/super, or the first segment
394
395
let mut curr_per_ns: PerNs < ModuleDef > = match path. kind {
395
396
PathKind :: Crate => PerNs :: types ( original_module. crate_root ( db) . into ( ) ) ,
396
397
PathKind :: Self_ => PerNs :: types ( original_module. into ( ) ) ,
397
398
PathKind :: Plain => {
398
399
let segment = match segments. next ( ) {
399
- Some ( ( _ , segment) ) => segment,
400
+ Some ( segment) => segment,
400
401
None => return ( PerNs :: none ( ) , ReachedFixedPoint :: Yes ) ,
401
402
} ;
402
403
// Resolve in:
@@ -424,19 +425,20 @@ impl ItemMap {
424
425
PathKind :: Abs => {
425
426
// 2018-style absolute path -- only extern prelude
426
427
let segment = match segments. next ( ) {
427
- Some ( ( _ , segment) ) => segment,
428
+ Some ( segment) => segment,
428
429
None => return ( PerNs :: none ( ) , ReachedFixedPoint :: Yes ) ,
429
430
} ;
430
431
if let Some ( def) = self . extern_prelude . get ( & segment. name ) {
431
432
log:: debug!( "absolute path {:?} resolved to crate {:?}" , path, def) ;
432
433
PerNs :: types ( * def)
433
434
} else {
434
- return ( PerNs :: none ( ) , ReachedFixedPoint :: Yes ) ;
435
+ return ( PerNs :: none ( ) , ReachedFixedPoint :: No ) ; // extern crate declarations can add to the extern prelude
435
436
}
436
437
}
437
438
} ;
438
439
439
- for ( i, segment) in segments {
440
+ // Go through the rest of the segments
441
+ while let Some ( segment) = segments. next ( ) {
440
442
let curr = match curr_per_ns. as_ref ( ) . take_types ( ) {
441
443
Some ( r) => r,
442
444
None => {
@@ -454,7 +456,7 @@ impl ItemMap {
454
456
ModuleDef :: Module ( module) => {
455
457
if module. krate != original_module. krate {
456
458
let path = Path {
457
- segments : path . segments [ i.. ] . iter ( ) . cloned ( ) . collect ( ) ,
459
+ segments : segments. cloned ( ) . collect ( ) ,
458
460
kind : PathKind :: Self_ ,
459
461
} ;
460
462
log:: debug!( "resolving {:?} in other crate" , path) ;
0 commit comments