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.
#![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
-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
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
//~^ 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:
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:
| ^^^^^^^^^^^^^^^^
= 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
#![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;
#![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]
= 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`
// aux-build:foo.rs
// compile-flags:--extern foo
+// compile-pass
// edition:2018
#![deny(unused_extern_crates)]
extern crate foo as foo_renamed;
-//~^ ERROR `extern crate` is not idiomatic in the new edition
pub mod m {
pub use foo_renamed::Foo;
+++ /dev/null
-error: `extern crate` is not idiomatic in the new edition
- --> $DIR/issue-57672.rs:7:1
- |
-LL | extern crate foo as foo_renamed;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`
- |
-note: lint level defined here
- --> $DIR/issue-57672.rs:5:9
- |
-LL | #![deny(unused_extern_crates)]
- | ^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-