Skip to content

Commit 1b9d058

Browse files
committed
Add field is_import to def::Export.
1 parent 58e8040 commit 1b9d058

File tree

8 files changed

+22
-9
lines changed

8 files changed

+22
-9
lines changed

src/librustc/hir/def.rs

+2
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ pub struct Export {
130130
/// The visibility of the export.
131131
/// We include non-`pub` exports for hygienic macros that get used from extern crates.
132132
pub vis: ty::Visibility,
133+
/// True if from a `use` or and `extern crate`.
134+
pub is_import: bool,
133135
}
134136

135137
impl CtorKind {

src/librustc/ich/impls_hir.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1163,7 +1163,8 @@ impl_stable_hash_for!(struct hir::def::Export {
11631163
ident,
11641164
def,
11651165
vis,
1166-
span
1166+
span,
1167+
is_import
11671168
});
11681169

11691170
impl<'gcx> HashStable<StableHashingContext<'gcx>>

src/librustc_metadata/decoder.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,7 @@ impl<'a, 'tcx> CrateMetadata {
636636
def: def,
637637
vis: ty::Visibility::Public,
638638
span: DUMMY_SP,
639+
is_import: false,
639640
});
640641
}
641642
}
@@ -675,6 +676,7 @@ impl<'a, 'tcx> CrateMetadata {
675676
ident: Ident::from_str(&self.item_name(child_index)),
676677
vis: self.get_visibility(child_index),
677678
span: self.entry(child_index).span.decode((self, sess)),
679+
is_import: false,
678680
});
679681
}
680682
}
@@ -692,16 +694,20 @@ impl<'a, 'tcx> CrateMetadata {
692694
(self.get_def(child_index), def_key.disambiguated_data.data.get_opt_name()) {
693695
let ident = Ident::from_str(&name);
694696
let vis = self.get_visibility(child_index);
695-
callback(def::Export { def, ident, vis, span });
697+
let is_import = false;
698+
callback(def::Export { def, ident, vis, span, is_import });
696699
// For non-reexport structs and variants add their constructors to children.
697700
// Reexport lists automatically contain constructors when necessary.
698701
match def {
699702
Def::Struct(..) => {
700703
if let Some(ctor_def_id) = self.get_struct_ctor_def_id(child_index) {
701704
let ctor_kind = self.get_ctor_kind(child_index);
702705
let ctor_def = Def::StructCtor(ctor_def_id, ctor_kind);
703-
let vis = self.get_visibility(ctor_def_id.index);
704-
callback(def::Export { def: ctor_def, ident, vis, span });
706+
callback(def::Export {
707+
def: ctor_def,
708+
vis: self.get_visibility(ctor_def_id.index),
709+
ident, span, is_import,
710+
});
705711
}
706712
}
707713
Def::Variant(def_id) => {
@@ -710,7 +716,7 @@ impl<'a, 'tcx> CrateMetadata {
710716
let ctor_kind = self.get_ctor_kind(child_index);
711717
let ctor_def = Def::VariantCtor(def_id, ctor_kind);
712718
let vis = self.get_visibility(child_index);
713-
callback(def::Export { def: ctor_def, ident, vis, span });
719+
callback(def::Export { def: ctor_def, ident, vis, span, is_import });
714720
}
715721
_ => {}
716722
}

src/librustc_resolve/build_reduced_graph.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ impl<'a> Resolver<'a> {
466466

467467
/// Builds the reduced graph for a single item in an external crate.
468468
fn build_reduced_graph_for_external_crate_def(&mut self, parent: Module<'a>, child: Export) {
469-
let Export { ident, def, vis, span } = child;
469+
let Export { ident, def, vis, span, .. } = child;
470470
let def_id = def.def_id();
471471
let expansion = Mark::root(); // FIXME(jseyfried) intercrate hygiene
472472
match def {
@@ -672,7 +672,7 @@ impl<'a> Resolver<'a> {
672672
let result = self.resolve_ident_in_module(module, ident, MacroNS, false, false, span);
673673
if let Ok(binding) = result {
674674
let (def, vis) = (binding.def(), binding.vis);
675-
self.macro_exports.push(Export { ident, def, vis, span });
675+
self.macro_exports.push(Export { ident, def, vis, span, is_import: true });
676676
} else {
677677
span_err!(self.session, span, E0470, "reexported macro not found");
678678
}

src/librustc_resolve/macros.rs

+1
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,7 @@ impl<'a> Resolver<'a> {
751751
def: def,
752752
vis: ty::Visibility::Public,
753753
span: item.span,
754+
is_import: false,
754755
});
755756
} else {
756757
self.unused_macros.insert(def_id);

src/librustc_resolve/resolve_imports.rs

+1
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,7 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
866866
def: def,
867867
span: binding.span,
868868
vis: binding.vis,
869+
is_import: true,
869870
});
870871
}
871872
}

src/librustdoc/clean/inline.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ fn build_module(cx: &DocContext, did: DefId) -> clean::Module {
391391
let mut visited = FxHashSet();
392392
for &item in cx.tcx.item_children(did).iter() {
393393
let def_id = item.def.def_id();
394-
if cx.tcx.visibility(def_id) == ty::Visibility::Public {
394+
if item.vis == ty::Visibility::Public {
395395
if !visited.insert(def_id) { continue }
396396
if let Some(i) = try_inline(cx, item.def, item.ident.name) {
397397
items.extend(i)

src/librustdoc/visit_lib.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ impl<'a, 'b, 'tcx> LibEmbargoVisitor<'a, 'b, 'tcx> {
6868
}
6969

7070
for item in self.cx.tcx.item_children(def_id).iter() {
71-
self.visit_item(item.def);
71+
if !item.is_import || item.vis == Visibility::Public {
72+
self.visit_item(item.def);
73+
}
7274
}
7375
}
7476

0 commit comments

Comments
 (0)