@@ -637,7 +637,6 @@ impl<'tcx> Visitor<'tcx> for UsePlacementFinder {
637637 } ,
638638 }
639639 }
640- assert ! ( self . span. is_some( ) , "a file can't have no items and emit suggestions" ) ;
641640 }
642641}
643642
@@ -3568,8 +3567,7 @@ impl<'a> Resolver<'a> {
35683567 } ;
35693568 visit:: walk_crate ( & mut finder, krate) ;
35703569 if !candidates. is_empty ( ) {
3571- let span = finder. span . expect ( "did not find module" ) ;
3572- show_candidates ( & mut err, span, & candidates, better, finder. found_use ) ;
3570+ show_candidates ( & mut err, finder. span , & candidates, better, finder. found_use ) ;
35733571 }
35743572 err. emit ( ) ;
35753573 }
@@ -3763,7 +3761,8 @@ fn import_candidate_to_paths(suggestion: &ImportSuggestion) -> (Span, String, St
37633761/// entities with that name in all crates. This method allows outputting the
37643762/// results of this search in a programmer-friendly way
37653763fn show_candidates ( err : & mut DiagnosticBuilder ,
3766- span : Span ,
3764+ // This is `None` if all placement locations are inside expansions
3765+ span : Option < Span > ,
37673766 candidates : & [ ImportSuggestion ] ,
37683767 better : bool ,
37693768 found_use : bool ) {
@@ -3781,18 +3780,27 @@ fn show_candidates(err: &mut DiagnosticBuilder,
37813780 } ;
37823781 let msg = format ! ( "possible {}candidate{} into scope" , better, msg_diff) ;
37833782
3784- for candidate in & mut path_strings {
3785- // produce an additional newline to separate the new use statement
3786- // from the directly following item.
3787- let additional_newline = if found_use {
3788- ""
3789- } else {
3790- "\n "
3791- } ;
3792- * candidate = format ! ( "use {};\n {}" , candidate, additional_newline) ;
3793- }
3783+ if let Some ( span) = span {
3784+ for candidate in & mut path_strings {
3785+ // produce an additional newline to separate the new use statement
3786+ // from the directly following item.
3787+ let additional_newline = if found_use {
3788+ ""
3789+ } else {
3790+ "\n "
3791+ } ;
3792+ * candidate = format ! ( "use {};\n {}" , candidate, additional_newline) ;
3793+ }
37943794
3795- err. span_suggestions ( span, & msg, path_strings) ;
3795+ err. span_suggestions ( span, & msg, path_strings) ;
3796+ } else {
3797+ let mut msg = msg;
3798+ msg. push ( ':' ) ;
3799+ for candidate in path_strings {
3800+ msg. push ( '\n' ) ;
3801+ msg. push_str ( & candidate) ;
3802+ }
3803+ }
37963804}
37973805
37983806/// A somewhat inefficient routine to obtain the name of a module.
0 commit comments