rust/tests/ui/rust-2018/remove-extern-crate.rs
surechen a61126cef6 By tracking import use types to check whether it is scope uses or the other situations like module-relative uses, we can do more accurate redundant import checking.
fixes #117448

For example unnecessary imports in std::prelude that can be eliminated:

```rust
use std::option::Option::Some;//~ WARNING the item `Some` is imported redundantly
use std::option::Option::None; //~ WARNING the item `None` is imported redundantly
```
2024-02-18 16:38:11 +08:00

52 lines
1.3 KiB
Rust

//@ run-rustfix
//@ edition:2018
//@ check-pass
//@ aux-build:remove-extern-crate.rs
//@ compile-flags:--extern remove_extern_crate
#![warn(rust_2018_idioms)]
#![allow(dropping_copy_types)]
#![allow(unused_imports)]
extern crate core; //~ WARNING unused extern crate
// 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;
// Shouldn't suggest changing to `use`, as the `alloc`
// crate is not in the extern prelude - see #54381.
extern crate alloc;
fn main() {
another_name::mem::drop(3);
another::foo();
with_visibility::foo();
remove_extern_crate::foo!();
bar!();
alloc::vec![5];
}
mod another {
extern crate core; //~ WARNING `extern crate` is not idiomatic
use remove_extern_crate;
pub fn foo() {
core::mem::drop(4);
remove_extern_crate::foo!();
}
}
mod with_visibility {
pub extern crate core; //~ WARNING `extern crate` is not idiomatic
pub fn foo() {
core::mem::drop(4);
remove_extern_crate::foo!();
}
}