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:
bors 2019-05-18 15:07:38 +00:00
commit 9a9df55f07
10 changed files with 54 additions and 51 deletions

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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:

View file

@ -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:

View file

@ -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

View file

@ -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;

View file

@ -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]

View file

@ -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`

View 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() {}