Warn when reexporting a private extern crate

This commit is contained in:
Jeffrey Seyfried
2016-02-02 09:39:59 +00:00
parent 3358fb11da
commit f8d6dcf46e
5 changed files with 24 additions and 13 deletions
+1 -3
View File
@@ -51,7 +51,7 @@
extern crate graphviz;
extern crate libc;
extern crate rbml;
extern crate rustc_llvm;
pub extern crate rustc_llvm as llvm;
extern crate rustc_back;
extern crate rustc_front;
extern crate rustc_data_structures;
@@ -66,8 +66,6 @@
#[cfg(test)]
extern crate test;
pub use rustc_llvm as llvm;
#[macro_use]
mod macros;
+17 -8
View File
@@ -402,14 +402,23 @@ fn resolve_single_import(&mut self,
}
(_, &Success(name_binding)) if !name_binding.is_import() && directive.is_public => {
// Disallow reexporting private items, excepting extern crates.
if !name_binding.is_public() && !name_binding.is_extern_crate() {
let msg = format!("`{}` is private, and cannot be reexported", source);
let note_msg =
format!("Consider declaring type or module `{}` with `pub`", source);
struct_span_err!(self.resolver.session, directive.span, E0365, "{}", &msg)
.span_note(directive.span, &note_msg)
.emit();
if !name_binding.is_public() {
if name_binding.is_extern_crate() {
let msg = format!("extern crate `{}` is private, and cannot be reexported \
(error E0364), consider declaring with `pub`",
source);
self.resolver.session.add_lint(lint::builtin::PRIVATE_IN_PUBLIC,
directive.id,
directive.span,
msg);
} else {
let msg = format!("`{}` is private, and cannot be reexported", source);
let note_msg =
format!("Consider declaring type or module `{}` with `pub`", source);
struct_span_err!(self.resolver.session, directive.span, E0365, "{}", &msg)
.span_note(directive.span, &note_msg)
.emit();
}
} else if name_binding.defined_with(DefModifiers::PRIVATE_VARIANT) {
let msg = format!("variant `{}` is private, and cannot be reexported \
(error E0364), consider declaring its enum as `pub`",
+1 -1
View File
@@ -46,7 +46,7 @@
extern crate rustc_back;
extern crate rustc_data_structures;
extern crate rustc_front;
extern crate rustc_llvm as llvm;
pub extern crate rustc_llvm as llvm;
extern crate rustc_mir;
extern crate rustc_platform_intrinsics as intrinsics;
extern crate serialize;
+1 -1
View File
@@ -21,7 +21,7 @@
use time::Duration;
pub use sys::{cvt, cvt_r};
pub use libc as netc;
pub extern crate libc as netc;
pub type wrlen_t = size_t;
@@ -11,6 +11,10 @@
#![feature(rustc_attrs)]
#![allow(dead_code)]
extern crate core;
pub use core as reexported_core; //~ WARN extern crate `core` is private, and cannot be reexported
//~^ WARNING hard error
mod m1 {
pub use ::E::V; //~ WARN variant `V` is private, and cannot be reexported
//~^ WARNING hard error