Skip to content

Commit 6c6bd88

Browse files
committed
Remove keywords from ExternCrate
1 parent d1d1739 commit 6c6bd88

File tree

3 files changed

+57
-52
lines changed

3 files changed

+57
-52
lines changed

src/librustdoc/clean/mod.rs

+1-44
Original file line numberDiff line numberDiff line change
@@ -84,51 +84,8 @@ impl<T: Clean<U>, U> Clean<Option<U>> for Option<T> {
8484

8585
impl Clean<ExternalCrate> for CrateNum {
8686
fn clean(&self, cx: &mut DocContext<'_>) -> ExternalCrate {
87-
let tcx = cx.tcx;
8887
let root = DefId { krate: *self, index: CRATE_DEF_INDEX };
89-
90-
let as_keyword = |res: Res| {
91-
if let Res::Def(DefKind::Mod, def_id) = res {
92-
let attrs = tcx.get_attrs(def_id);
93-
let mut keyword = None;
94-
for attr in attrs.lists(sym::doc) {
95-
if attr.has_name(sym::keyword) {
96-
if let Some(v) = attr.value_str() {
97-
keyword = Some(v);
98-
break;
99-
}
100-
}
101-
}
102-
return keyword.map(|p| (def_id, p));
103-
}
104-
None
105-
};
106-
let keywords = if root.is_local() {
107-
tcx.hir()
108-
.krate()
109-
.item
110-
.item_ids
111-
.iter()
112-
.filter_map(|&id| {
113-
let item = tcx.hir().item(id);
114-
match item.kind {
115-
hir::ItemKind::Mod(_) => {
116-
as_keyword(Res::Def(DefKind::Mod, id.def_id.to_def_id()))
117-
}
118-
hir::ItemKind::Use(ref path, hir::UseKind::Single)
119-
if item.vis.node.is_pub() =>
120-
{
121-
as_keyword(path.res).map(|(_, prim)| (id.def_id.to_def_id(), prim))
122-
}
123-
_ => None,
124-
}
125-
})
126-
.collect()
127-
} else {
128-
tcx.item_children(root).iter().map(|item| item.res).filter_map(as_keyword).collect()
129-
};
130-
131-
ExternalCrate { crate_num: *self, attrs: tcx.get_attrs(root).clean(cx), keywords }
88+
ExternalCrate { crate_num: *self, attrs: cx.tcx.get_attrs(root).clean(cx) }
13289
}
13390
}
13491

src/librustdoc/clean/types.rs

+52-4
Original file line numberDiff line numberDiff line change
@@ -74,22 +74,70 @@ crate struct TraitWithExtraInfo {
7474
crate struct ExternalCrate {
7575
crate crate_num: CrateNum,
7676
crate attrs: Attributes,
77-
crate keywords: ThinVec<(DefId, Symbol)>,
7877
}
7978

8079
impl ExternalCrate {
80+
#[inline]
81+
fn def_id(&self) -> DefId {
82+
DefId { krate: self.crate_num, index: CRATE_DEF_INDEX }
83+
}
84+
8185
crate fn src(&self, tcx: TyCtxt<'_>) -> FileName {
82-
let root = DefId { krate: self.crate_num, index: rustc_hir::def_id::CRATE_DEF_INDEX };
83-
let krate_span = tcx.def_span(root);
86+
let krate_span = tcx.def_span(self.def_id());
8487
tcx.sess.source_map().span_to_filename(krate_span)
8588
}
8689

8790
crate fn name(&self, tcx: TyCtxt<'_>) -> Symbol {
8891
tcx.crate_name(self.crate_num)
8992
}
9093

94+
crate fn keywords(&self, tcx: TyCtxt<'_>) -> ThinVec<(DefId, Symbol)> {
95+
let root = self.def_id();
96+
97+
let as_keyword = |res: Res| {
98+
if let Res::Def(DefKind::Mod, def_id) = res {
99+
let attrs = tcx.get_attrs(def_id);
100+
let mut keyword = None;
101+
for attr in attrs.lists(sym::doc) {
102+
if attr.has_name(sym::keyword) {
103+
if let Some(v) = attr.value_str() {
104+
keyword = Some(v);
105+
break;
106+
}
107+
}
108+
}
109+
return keyword.map(|p| (def_id, p));
110+
}
111+
None
112+
};
113+
if root.is_local() {
114+
tcx.hir()
115+
.krate()
116+
.item
117+
.item_ids
118+
.iter()
119+
.filter_map(|&id| {
120+
let item = tcx.hir().item(id);
121+
match item.kind {
122+
hir::ItemKind::Mod(_) => {
123+
as_keyword(Res::Def(DefKind::Mod, id.def_id.to_def_id()))
124+
}
125+
hir::ItemKind::Use(ref path, hir::UseKind::Single)
126+
if item.vis.node.is_pub() =>
127+
{
128+
as_keyword(path.res).map(|(_, prim)| (id.def_id.to_def_id(), prim))
129+
}
130+
_ => None,
131+
}
132+
})
133+
.collect()
134+
} else {
135+
tcx.item_children(root).iter().map(|item| item.res).filter_map(as_keyword).collect()
136+
}
137+
}
138+
91139
crate fn primitives(&self, tcx: TyCtxt<'_>) -> ThinVec<(DefId, PrimitiveType)> {
92-
let root = DefId { krate: self.crate_num, index: CRATE_DEF_INDEX };
140+
let root = self.def_id();
93141

94142
// Collect all inner modules which are tagged as implementations of
95143
// primitives.

src/librustdoc/clean/utils.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use crate::clean::auto_trait::AutoTraitFinder;
22
use crate::clean::blanket_impl::BlanketImplFinder;
33
use crate::clean::{
4-
inline, Clean, Crate, ExternalCrate, Generic, GenericArg, GenericArgs, ImportSource, Item,
5-
ItemKind, Lifetime, MacroKind, Path, PathSegment, Primitive, PrimitiveType, ResolvedPath, Type,
6-
TypeBinding, TypeKind,
4+
inline, Clean, Crate, Generic, GenericArg, GenericArgs, ImportSource, Item, ItemKind, Lifetime,
5+
MacroKind, Path, PathSegment, Primitive, PrimitiveType, ResolvedPath, Type, TypeBinding,
6+
TypeKind,
77
};
88
use crate::core::DocContext;
99

@@ -58,7 +58,7 @@ crate fn krate(cx: &mut DocContext<'_>) -> Crate {
5858
let src = local_crate.src(cx.tcx);
5959
let name = local_crate.name(cx.tcx);
6060
let primitives = local_crate.primitives(cx.tcx);
61-
let ExternalCrate { keywords, .. } = local_crate;
61+
let keywords = local_crate.keywords(cx.tcx);
6262
{
6363
let m = match *module.kind {
6464
ItemKind::ModuleItem(ref mut m) => m,

0 commit comments

Comments
 (0)