@@ -475,12 +475,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
475475 errors = vec ! [ ] ;
476476 }
477477 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) ) ;
484479 prev_root_id = import. root_id ;
485480 }
486481 } else if is_indeterminate {
@@ -496,8 +491,10 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
496491 suggestion : None ,
497492 candidate : None ,
498493 } ;
494+ // FIXME: there should be a better way of doing this than
495+ // formatting this as a string then checking for `::`
499496 if path. contains ( "::" ) {
500- errors. push ( ( path , err) )
497+ errors. push ( ( import , err) )
501498 }
502499 }
503500 }
@@ -507,7 +504,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
507504 }
508505 }
509506
510- fn throw_unresolved_import_error ( & self , errors : Vec < ( String , UnresolvedImportError ) > ) {
507+ fn throw_unresolved_import_error ( & self , errors : Vec < ( & Import < ' _ > , UnresolvedImportError ) > ) {
511508 if errors. is_empty ( ) {
512509 return ;
513510 }
@@ -516,7 +513,17 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
516513 const MAX_LABEL_COUNT : usize = 10 ;
517514
518515 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 < _ > > ( ) ;
520527 let msg = format ! ( "unresolved import{} {}" , pluralize!( paths. len( ) ) , paths. join( ", " ) , ) ;
521528
522529 let mut diag = struct_span_err ! ( self . r. session, span, E0432 , "{}" , & msg) ;
@@ -525,7 +532,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
525532 diag. note ( note) ;
526533 }
527534
528- for ( _ , err) in errors. into_iter ( ) . take ( MAX_LABEL_COUNT ) {
535+ for ( import , err) in errors. into_iter ( ) . take ( MAX_LABEL_COUNT ) {
529536 if let Some ( label) = err. label {
530537 diag. span_label ( err. span , label) ;
531538 }
@@ -539,13 +546,16 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
539546 }
540547
541548 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+ }
549559 }
550560 }
551561
0 commit comments