Auto merge of #60252 - davidtwco:issue-57672, r=Mark-Simulacrum
Don't suggest changing extern crate w/ alias to use. Fixes #57672.
This commit is contained in:
commit
9a9df55f07
10 changed files with 54 additions and 51 deletions
|
@ -158,6 +158,13 @@ fn unused_crates_lint<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>) {
|
|||
continue;
|
||||
}
|
||||
|
||||
// If the extern crate is renamed, then we cannot suggest replacing it with a use as this
|
||||
// would not insert the new name into the prelude, where other imports in the crate may be
|
||||
// expecting it.
|
||||
if extern_crate.orig_name.is_some() {
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the extern crate has any attributes, they may have funky
|
||||
// semantics we can't faithfully represent using `use` (most
|
||||
// notably `#[macro_use]`). Ignore it.
|
||||
|
|
|
@ -5,10 +5,14 @@
|
|||
|
||||
#![deny(unused_extern_crates)]
|
||||
|
||||
extern crate core as iso1; //~ ERROR `extern crate` is not idiomatic in the new edition
|
||||
extern crate core as iso2; //~ ERROR `extern crate` is not idiomatic in the new edition
|
||||
extern crate core as iso3; //~ ERROR `extern crate` is not idiomatic in the new edition
|
||||
extern crate core as iso4; //~ ERROR `extern crate` is not idiomatic in the new edition
|
||||
// Shouldn't suggest changing to `use`, as new name
|
||||
// would no longer be added to the prelude which could cause
|
||||
// compilation errors for imports that use the new name in
|
||||
// other modules. See #57672.
|
||||
extern crate core as iso1;
|
||||
extern crate core as iso2;
|
||||
extern crate core as iso3;
|
||||
extern crate core as iso4;
|
||||
|
||||
// Doesn't introduce its extern prelude entry, so it's still considered unused.
|
||||
extern crate core; //~ ERROR unused extern crate
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
error: `extern crate` is not idiomatic in the new edition
|
||||
--> $DIR/extern-crate-used.rs:8:1
|
||||
error: unused extern crate
|
||||
--> $DIR/extern-crate-used.rs:18:1
|
||||
|
|
||||
LL | extern crate core as iso1;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`
|
||||
LL | extern crate core;
|
||||
| ^^^^^^^^^^^^^^^^^^ help: remove it
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/extern-crate-used.rs:6:9
|
||||
|
@ -10,29 +10,5 @@ note: lint level defined here
|
|||
LL | #![deny(unused_extern_crates)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: `extern crate` is not idiomatic in the new edition
|
||||
--> $DIR/extern-crate-used.rs:9:1
|
||||
|
|
||||
LL | extern crate core as iso2;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`
|
||||
|
||||
error: `extern crate` is not idiomatic in the new edition
|
||||
--> $DIR/extern-crate-used.rs:10:1
|
||||
|
|
||||
LL | extern crate core as iso3;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`
|
||||
|
||||
error: `extern crate` is not idiomatic in the new edition
|
||||
--> $DIR/extern-crate-used.rs:11:1
|
||||
|
|
||||
LL | extern crate core as iso4;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`
|
||||
|
||||
error: unused extern crate
|
||||
--> $DIR/extern-crate-used.rs:14:1
|
||||
|
|
||||
LL | extern crate core;
|
||||
| ^^^^^^^^^^^^^^^^^^ help: remove it
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -12,8 +12,11 @@
|
|||
|
||||
//~^ ERROR unused extern crate
|
||||
|
||||
use edition_lint_paths as bar;
|
||||
//~^ ERROR `extern crate` is not idiomatic in the new edition
|
||||
// Shouldn't suggest changing to `use`, as `bar`
|
||||
// would no longer be added to the prelude which could cause
|
||||
// compilation errors for imports that use `bar` in other
|
||||
// modules. See #57672.
|
||||
extern crate edition_lint_paths as bar;
|
||||
|
||||
fn main() {
|
||||
// This is not considered to *use* the `extern crate` in Rust 2018:
|
||||
|
|
|
@ -12,8 +12,11 @@
|
|||
extern crate edition_lint_paths;
|
||||
//~^ ERROR unused extern crate
|
||||
|
||||
// Shouldn't suggest changing to `use`, as `bar`
|
||||
// would no longer be added to the prelude which could cause
|
||||
// compilation errors for imports that use `bar` in other
|
||||
// modules. See #57672.
|
||||
extern crate edition_lint_paths as bar;
|
||||
//~^ ERROR `extern crate` is not idiomatic in the new edition
|
||||
|
||||
fn main() {
|
||||
// This is not considered to *use* the `extern crate` in Rust 2018:
|
||||
|
|
|
@ -11,11 +11,5 @@ LL | #![deny(rust_2018_idioms)]
|
|||
| ^^^^^^^^^^^^^^^^
|
||||
= note: #[deny(unused_extern_crates)] implied by #[deny(rust_2018_idioms)]
|
||||
|
||||
error: `extern crate` is not idiomatic in the new edition
|
||||
--> $DIR/extern-crate-idiomatic-in-2018.rs:15:1
|
||||
|
|
||||
LL | extern crate edition_lint_paths as bar;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -7,7 +7,11 @@
|
|||
#![warn(rust_2018_idioms)]
|
||||
|
||||
|
||||
use core as another_name;
|
||||
// Shouldn't suggest changing to `use`, as `another_name`
|
||||
// would no longer be added to the prelude which could cause
|
||||
// compilation errors for imports that use `another_name` in other
|
||||
// modules. See #57672.
|
||||
extern crate core as another_name;
|
||||
use remove_extern_crate;
|
||||
#[macro_use]
|
||||
extern crate remove_extern_crate as something_else;
|
||||
|
|
|
@ -7,6 +7,10 @@
|
|||
#![warn(rust_2018_idioms)]
|
||||
|
||||
extern crate core;
|
||||
// Shouldn't suggest changing to `use`, as `another_name`
|
||||
// would no longer be added to the prelude which could cause
|
||||
// compilation errors for imports that use `another_name` in other
|
||||
// modules. See #57672.
|
||||
extern crate core as another_name;
|
||||
use remove_extern_crate;
|
||||
#[macro_use]
|
||||
|
|
|
@ -12,13 +12,7 @@ LL | #![warn(rust_2018_idioms)]
|
|||
= note: #[warn(unused_extern_crates)] implied by #[warn(rust_2018_idioms)]
|
||||
|
||||
warning: `extern crate` is not idiomatic in the new edition
|
||||
--> $DIR/remove-extern-crate.rs:10:1
|
||||
|
|
||||
LL | extern crate core as another_name;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`
|
||||
|
||||
warning: `extern crate` is not idiomatic in the new edition
|
||||
--> $DIR/remove-extern-crate.rs:28:5
|
||||
--> $DIR/remove-extern-crate.rs:32:5
|
||||
|
|
||||
LL | extern crate core;
|
||||
| ^^^^^^^^^^^^^^^^^^ help: convert it to a `use`
|
||||
|
|
14
src/test/ui/suggestions/issue-57672.rs
Normal file
14
src/test/ui/suggestions/issue-57672.rs
Normal file
|
@ -0,0 +1,14 @@
|
|||
// aux-build:foo.rs
|
||||
// compile-flags:--extern foo
|
||||
// compile-pass
|
||||
// edition:2018
|
||||
|
||||
#![deny(unused_extern_crates)]
|
||||
|
||||
extern crate foo as foo_renamed;
|
||||
|
||||
pub mod m {
|
||||
pub use foo_renamed::Foo;
|
||||
}
|
||||
|
||||
fn main() {}
|
Loading…
Reference in a new issue