mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
Address review comments and cleanup code
This commit is contained in:
parent
ac4b685650
commit
1b659d69bc
@ -5134,62 +5134,59 @@ impl<'a> Resolver<'a> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// See https://github.com/rust-lang/rust/issues/32354
|
// See https://github.com/rust-lang/rust/issues/32354
|
||||||
if old_binding.is_import() || new_binding.is_import() {
|
let directive = match (&new_binding.kind, &old_binding.kind) {
|
||||||
let binding = if new_binding.is_import() && !new_binding.span.is_dummy() {
|
(NameBindingKind::Import { directive, .. }, _) if !new_binding.span.is_dummy() =>
|
||||||
new_binding
|
Some((directive, new_binding.span)),
|
||||||
|
(_, NameBindingKind::Import { directive, .. }) if !old_binding.span.is_dummy() =>
|
||||||
|
Some((directive, old_binding.span)),
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
if let Some((directive, binding_span)) = directive {
|
||||||
|
let suggested_name = if name.as_str().chars().next().unwrap().is_uppercase() {
|
||||||
|
format!("Other{}", name)
|
||||||
} else {
|
} else {
|
||||||
old_binding
|
format!("other_{}", name)
|
||||||
};
|
};
|
||||||
|
|
||||||
let cm = self.session.source_map();
|
let mut suggestion = None;
|
||||||
|
match directive.subclass {
|
||||||
|
ImportDirectiveSubclass::SingleImport { type_ns_only: true, .. } =>
|
||||||
|
suggestion = Some(format!("self as {}", suggested_name)),
|
||||||
|
ImportDirectiveSubclass::SingleImport { source, .. } => {
|
||||||
|
if let Some(pos) = source.span.hi().0.checked_sub(binding_span.lo().0)
|
||||||
|
.map(|pos| pos as usize) {
|
||||||
|
if let Ok(snippet) = self.session.source_map()
|
||||||
|
.span_to_snippet(binding_span) {
|
||||||
|
if pos <= snippet.len() {
|
||||||
|
suggestion = Some(format!(
|
||||||
|
"{} as {}{}",
|
||||||
|
&snippet[..pos],
|
||||||
|
suggested_name,
|
||||||
|
if snippet.ends_with(";") { ";" } else { "" }
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImportDirectiveSubclass::ExternCrate { source, target, .. } =>
|
||||||
|
suggestion = Some(format!(
|
||||||
|
"extern crate {} as {};",
|
||||||
|
source.unwrap_or(target.name),
|
||||||
|
suggested_name,
|
||||||
|
)),
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
|
||||||
let rename_msg = "you can use `as` to change the binding name of the import";
|
let rename_msg = "you can use `as` to change the binding name of the import";
|
||||||
|
if let Some(suggestion) = suggestion {
|
||||||
if let (
|
|
||||||
Ok(snippet),
|
|
||||||
NameBindingKind::Import { directive, ..},
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
) = (
|
|
||||||
cm.span_to_snippet(binding.span),
|
|
||||||
binding.kind.clone(),
|
|
||||||
binding.span.is_dummy(),
|
|
||||||
binding.span.ctxt().outer().expn_info().is_some(),
|
|
||||||
) {
|
|
||||||
let suggested_name = if name.as_str().chars().next().unwrap().is_uppercase() {
|
|
||||||
format!("Other{}", name)
|
|
||||||
} else {
|
|
||||||
format!("other_{}", name)
|
|
||||||
};
|
|
||||||
|
|
||||||
err.span_suggestion_with_applicability(
|
err.span_suggestion_with_applicability(
|
||||||
binding.span,
|
binding_span,
|
||||||
&rename_msg,
|
rename_msg,
|
||||||
match directive.subclass {
|
suggestion,
|
||||||
ImportDirectiveSubclass::SingleImport { type_ns_only: true, .. } =>
|
|
||||||
format!("self as {}", suggested_name),
|
|
||||||
ImportDirectiveSubclass::SingleImport { source, .. } =>
|
|
||||||
format!(
|
|
||||||
"{} as {}{}",
|
|
||||||
&snippet[..((source.span.hi().0 - binding.span.lo().0) as usize)],
|
|
||||||
suggested_name,
|
|
||||||
if snippet.ends_with(";") {
|
|
||||||
";"
|
|
||||||
} else {
|
|
||||||
""
|
|
||||||
}
|
|
||||||
),
|
|
||||||
ImportDirectiveSubclass::ExternCrate { source, target, .. } =>
|
|
||||||
format!(
|
|
||||||
"extern crate {} as {};",
|
|
||||||
source.unwrap_or(target.name),
|
|
||||||
suggested_name,
|
|
||||||
),
|
|
||||||
_ => unreachable!(),
|
|
||||||
},
|
|
||||||
Applicability::MaybeIncorrect,
|
Applicability::MaybeIncorrect,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
err.span_label(binding.span, rename_msg);
|
err.span_label(binding_span, rename_msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,14 +3,14 @@ macro_rules! import {
|
|||||||
$(
|
$(
|
||||||
mod $name;
|
mod $name;
|
||||||
pub use self::$name;
|
pub use self::$name;
|
||||||
//~^ ERROR the name `issue_56411` is defined multiple times
|
//~^ ERROR the name `issue_56411_aux` is defined multiple times
|
||||||
//~| ERROR `issue_56411` is private, and cannot be re-exported
|
//~| ERROR `issue_56411_aux` is private, and cannot be re-exported
|
||||||
|
|
||||||
)*
|
)*
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
import!(issue_56411);
|
import!(issue_56411_aux);
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("Hello, world!");
|
println!("Hello, world!");
|
||||||
|
@ -1,29 +1,29 @@
|
|||||||
error[E0255]: the name `issue_56411` is defined multiple times
|
error[E0255]: the name `issue_56411_aux` is defined multiple times
|
||||||
--> $DIR/issue-56411.rs:5:21
|
--> $DIR/issue-56411.rs:5:21
|
||||||
|
|
|
|
||||||
LL | mod $name;
|
LL | mod $name;
|
||||||
| ---------- previous definition of the module `issue_56411` here
|
| ---------- previous definition of the module `issue_56411_aux` here
|
||||||
LL | pub use self::$name;
|
LL | pub use self::$name;
|
||||||
| ^^^^^^^^^^^
|
| ^^^^^^^^^^^
|
||||||
| |
|
| |
|
||||||
| `issue_56411` reimported here
|
| `issue_56411_aux` reimported here
|
||||||
| you can use `as` to change the binding name of the import
|
| you can use `as` to change the binding name of the import
|
||||||
...
|
...
|
||||||
LL | import!(issue_56411);
|
LL | import!(issue_56411_aux);
|
||||||
| --------------------- in this macro invocation
|
| ------------------------- in this macro invocation
|
||||||
|
|
|
|
||||||
= note: `issue_56411` must be defined only once in the type namespace of this module
|
= note: `issue_56411_aux` must be defined only once in the type namespace of this module
|
||||||
|
|
||||||
error[E0365]: `issue_56411` is private, and cannot be re-exported
|
error[E0365]: `issue_56411_aux` is private, and cannot be re-exported
|
||||||
--> $DIR/issue-56411.rs:5:21
|
--> $DIR/issue-56411.rs:5:21
|
||||||
|
|
|
|
||||||
LL | pub use self::$name;
|
LL | pub use self::$name;
|
||||||
| ^^^^^^^^^^^ re-export of private `issue_56411`
|
| ^^^^^^^^^^^ re-export of private `issue_56411_aux`
|
||||||
...
|
...
|
||||||
LL | import!(issue_56411);
|
LL | import!(issue_56411_aux);
|
||||||
| --------------------- in this macro invocation
|
| ------------------------- in this macro invocation
|
||||||
|
|
|
|
||||||
= note: consider declaring type or module `issue_56411` with `pub`
|
= note: consider declaring type or module `issue_56411_aux` with `pub`
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user