changing non-empty glob must import something to a lint

This commit is contained in:
Quentin Boyer 2019-10-28 00:57:25 +01:00
parent e369d87b01
commit de9413bd34
3 changed files with 27 additions and 15 deletions

View File

@ -972,8 +972,9 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
if !is_prelude && if !is_prelude &&
max_vis.get() != ty::Visibility::Invisible && // Allow empty globs. max_vis.get() != ty::Visibility::Invisible && // Allow empty globs.
!max_vis.get().is_at_least(directive.vis.get(), &*self) { !max_vis.get().is_at_least(directive.vis.get(), &*self) {
let msg = "A non-empty glob must import something with the glob's visibility"; let msg =
self.r.session.span_err(directive.span, msg); "glob import doesn't reexport anything because no candidate is public enough";
self.r.session.buffer_lint(UNUSED_IMPORTS, directive.id, directive.span, msg);
} }
return None; return None;
} }

View File

@ -1,16 +1,21 @@
#![warn(unused_imports)]
mod a { mod a {
fn foo() {} fn foo() {}
mod foo {} mod foo {}
mod a { mod a {
pub use super::foo; //~ ERROR cannot be re-exported pub use super::foo; //~ ERROR cannot be re-exported
pub use super::*; //~ ERROR must import something with the glob's visibility pub use super::*;
//~^ WARNING glob import doesn't reexport anything because no candidate is public enough
} }
} }
mod b { mod b {
pub fn foo() {} pub fn foo() {}
mod foo { pub struct S; } mod foo {
pub struct S;
}
pub mod a { pub mod a {
pub use super::foo; // This is OK since the value `foo` is visible enough. pub use super::foo; // This is OK since the value `foo` is visible enough.

View File

@ -1,34 +1,40 @@
error[E0364]: `foo` is private, and cannot be re-exported error[E0364]: `foo` is private, and cannot be re-exported
--> $DIR/reexports.rs:6:17 --> $DIR/reexports.rs:10:17
| |
LL | pub use super::foo; LL | pub use super::foo;
| ^^^^^^^^^^ | ^^^^^^^^^^
| |
note: consider marking `foo` as `pub` in the imported module note: consider marking `foo` as `pub` in the imported module
--> $DIR/reexports.rs:6:17 --> $DIR/reexports.rs:10:17
| |
LL | pub use super::foo; LL | pub use super::foo;
| ^^^^^^^^^^ | ^^^^^^^^^^
error: A non-empty glob must import something with the glob's visibility
--> $DIR/reexports.rs:7:17
|
LL | pub use super::*;
| ^^^^^^^^
error[E0603]: module `foo` is private error[E0603]: module `foo` is private
--> $DIR/reexports.rs:28:15 --> $DIR/reexports.rs:35:15
| |
LL | use b::a::foo::S; LL | use b::a::foo::S;
| ^^^ | ^^^
error[E0603]: module `foo` is private error[E0603]: module `foo` is private
--> $DIR/reexports.rs:29:15 --> $DIR/reexports.rs:36:15
| |
LL | use b::b::foo::S as T; LL | use b::b::foo::S as T;
| ^^^ | ^^^
error: aborting due to 4 previous errors warning: this glob doesn't reexport anything because no canditate is public enough
--> $DIR/reexports.rs:11:17
|
LL | pub use super::*;
| ^^^^^^^^
|
note: lint level defined here
--> $DIR/reexports.rs:1:9
|
LL | #![warn(unused_imports)]
| ^^^^^^^^^^^^^^
error: aborting due to 3 previous errors
Some errors have detailed explanations: E0364, E0603. Some errors have detailed explanations: E0364, E0603.
For more information about an error, try `rustc --explain E0364`. For more information about an error, try `rustc --explain E0364`.