Skip to content

Commit 99b9ffb

Browse files
oli-obkmichaelwoerister
authored andcommitted
Prevent suggestions from being emitted if all possible locations are inside expansions
1 parent 7c4e855 commit 99b9ffb

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

src/librustc_resolve/lib.rs

+23-15
Original file line numberDiff line numberDiff line change
@@ -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
37653763
fn 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

Comments
 (0)