Instead of modifying the item's span synthesize it

This commit is contained in:
Esteban Küber 2018-01-25 22:40:38 -08:00
parent c39ad4b145
commit 445e404ba4
4 changed files with 12 additions and 6 deletions

View File

@ -4000,7 +4000,13 @@ impl<'a> Resolver<'a> {
binding.is_renamed_extern_crate()) {
err.span_suggestion(binding.span,
rename_msg,
format!("{} as Other{}", snippet, name));
if snippet.ends_with(';') {
format!("{} as Other{};",
&snippet[..snippet.len()-1],
name)
} else {
format!("{} as Other{}", snippet, name)
});
} else {
err.span_label(binding.span, rename_msg);
}

View File

@ -6128,11 +6128,10 @@ impl<'a> Parser<'a> {
} else {
(None, crate_name)
};
// We grab this before expecting the `;` so it's not a part of the span
let prev_span = self.prev_span;
self.expect(&token::Semi)?;
let prev_span = self.prev_span;
Ok(self.mk_item(lo.to(prev_span),
ident,
ItemKind::ExternCrate(maybe_path),

View File

@ -10,3 +10,4 @@
extern crate std;
fn main() {}
//~^^ ERROR the name `std` is defined multiple times [E0259]

View File

@ -2,13 +2,13 @@ error[E0259]: the name `std` is defined multiple times
--> $DIR/issue-45799-bad-extern-crate-rename-suggestion-formatting.rs:11:1
|
11 | extern crate std;
| ^^^^^^^^^^^^^^^^ `std` reimported here
| ^^^^^^^^^^^^^^^^^ `std` reimported here
|
= note: `std` must be defined only once in the type namespace of this module
help: You can use `as` to change the binding name of the import
|
11 | extern crate std as Otherstd;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
error: aborting due to previous error