blob: c021ad5ee0d2bcf00f720643c544561d8cd0ad60 [file] [log] [blame]
// check-pass
// aux-build:underscore-imports.rs
#![warn(unused_imports, unused_extern_crates)]
#[macro_use]
extern crate underscore_imports as _;
do_nothing!(); // OK
struct S;
mod m {
pub trait Tr1 {
fn tr1_is_in_scope(&self) {}
}
pub trait Tr2 {
fn tr2_is_in_scope(&self) {}
}
impl Tr1 for ::S {}
impl Tr2 for ::S {}
}
mod unused {
use m::Tr1 as _; //~ WARN unused import
use S as _; //~ WARN unused import
extern crate core as _; // OK
}
mod outer {
mod middle {
pub use m::Tr1 as _;
pub use m::Tr2 as _; // OK, no name conflict
struct Tr1; // OK, no name conflict
fn check() {
// Both traits are in scope
::S.tr1_is_in_scope();
::S.tr2_is_in_scope();
}
mod inner {
// `_` imports are fetched by glob imports
use super::*;
fn check() {
// Both traits are in scope
::S.tr1_is_in_scope();
::S.tr2_is_in_scope();
}
}
}
// `_` imports are fetched by glob imports
use self::middle::*;
fn check() {
// Both traits are in scope
::S.tr1_is_in_scope();
::S.tr2_is_in_scope();
}
}
fn main() {}