@@ -475,12 +475,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
475
475
errors = vec ! [ ] ;
476
476
}
477
477
if seen_spans. insert ( err. span ) {
478
- let path = import_path_to_string (
479
- & import. module_path . iter ( ) . map ( |seg| seg. ident ) . collect :: < Vec < _ > > ( ) ,
480
- & import. kind ,
481
- err. span ,
482
- ) ;
483
- errors. push ( ( path, err) ) ;
478
+ errors. push ( ( import, err) ) ;
484
479
prev_root_id = import. root_id ;
485
480
}
486
481
} else if is_indeterminate {
@@ -496,8 +491,10 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
496
491
suggestion : None ,
497
492
candidate : None ,
498
493
} ;
494
+ // FIXME: there should be a better way of doing this than
495
+ // formatting this as a string then checking for `::`
499
496
if path. contains ( "::" ) {
500
- errors. push ( ( path , err) )
497
+ errors. push ( ( import , err) )
501
498
}
502
499
}
503
500
}
@@ -507,7 +504,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
507
504
}
508
505
}
509
506
510
- fn throw_unresolved_import_error ( & self , errors : Vec < ( String , UnresolvedImportError ) > ) {
507
+ fn throw_unresolved_import_error ( & self , errors : Vec < ( & Import < ' _ > , UnresolvedImportError ) > ) {
511
508
if errors. is_empty ( ) {
512
509
return ;
513
510
}
@@ -516,7 +513,17 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
516
513
const MAX_LABEL_COUNT : usize = 10 ;
517
514
518
515
let span = MultiSpan :: from_spans ( errors. iter ( ) . map ( |( _, err) | err. span ) . collect ( ) ) ;
519
- let paths = errors. iter ( ) . map ( |( path, _) | format ! ( "`{}`" , path) ) . collect :: < Vec < _ > > ( ) ;
516
+ let paths = errors
517
+ . iter ( )
518
+ . map ( |( import, err) | {
519
+ let path = import_path_to_string (
520
+ & import. module_path . iter ( ) . map ( |seg| seg. ident ) . collect :: < Vec < _ > > ( ) ,
521
+ & import. kind ,
522
+ err. span ,
523
+ ) ;
524
+ format ! ( "`{path}`" )
525
+ } )
526
+ . collect :: < Vec < _ > > ( ) ;
520
527
let msg = format ! ( "unresolved import{} {}" , pluralize!( paths. len( ) ) , paths. join( ", " ) , ) ;
521
528
522
529
let mut diag = struct_span_err ! ( self . r. session, span, E0432 , "{}" , & msg) ;
@@ -525,7 +532,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
525
532
diag. note ( note) ;
526
533
}
527
534
528
- for ( _ , err) in errors. into_iter ( ) . take ( MAX_LABEL_COUNT ) {
535
+ for ( import , err) in errors. into_iter ( ) . take ( MAX_LABEL_COUNT ) {
529
536
if let Some ( label) = err. label {
530
537
diag. span_label ( err. span , label) ;
531
538
}
@@ -539,13 +546,16 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
539
546
}
540
547
541
548
if let Some ( candidate) = & err. candidate {
542
- import_candidates (
543
- self . r . session ,
544
- & self . r . untracked . source_span ,
545
- & mut diag,
546
- Some ( err. span ) ,
547
- & candidate,
548
- )
549
+ match & import. kind {
550
+ ImportKind :: Single { nested : false , .. } => import_candidates (
551
+ self . r . session ,
552
+ & self . r . untracked . source_span ,
553
+ & mut diag,
554
+ Some ( err. span ) ,
555
+ & candidate,
556
+ ) ,
557
+ _ => { }
558
+ }
549
559
}
550
560
}
551
561
0 commit comments