Rollup merge of #100228 - luqmana:suggestion-ice, r=estebank
Don't ICE while suggesting updating item path. When an item isn't found, we may suggest an appropriate import to `use`. Along with that, we also suggest updating the path to work with the `use`. Unfortunately, if the code in question originates from a macro, the span used to indicate which part of the path needs updating may not be suitable and cause an ICE (*). Since, such code is not adjustable directly by the user without modifying the macro, just skip the suggestion in such cases. (*) The ICE happens because the emitter want to indicate to the user what code to delete by referencing a certain span. But in this case, said span has `lo == hi == 0` which means it thinks it's a dummy span. Adding a space before the proc macro attribute is enough to stop it from ICE'ing but even then the suggestion doesn't really make any sense: ``` help: if you import `DataStore`, refer to it directly | 1 - #[dbstruct::dbstruct] 1 + #[dbstruct::dbstruct] ``` Since suggestions are best-effort, I just gated this one on `can_be_used_for_suggestions` which catches cases like this. Fixes #100199
This commit is contained in:
commit
fac84e8bb6
4 changed files with 58 additions and 6 deletions
|
@ -2544,12 +2544,15 @@ fn show_candidates(
|
|||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
if let [first, .., last] = &path[..] {
|
||||
err.span_suggestion_verbose(
|
||||
first.ident.span.until(last.ident.span),
|
||||
&format!("if you import `{}`, refer to it directly", last.ident),
|
||||
"",
|
||||
Applicability::Unspecified,
|
||||
);
|
||||
let sp = first.ident.span.until(last.ident.span);
|
||||
if sp.can_be_used_for_suggestions() {
|
||||
err.span_suggestion_verbose(
|
||||
sp,
|
||||
&format!("if you import `{}`, refer to it directly", last.ident),
|
||||
"",
|
||||
Applicability::Unspecified,
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
msg.push(':');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue