rustdoc: Eliminate remaining uses of resolver
This commit is contained in:
parent
00cf19a75a
commit
9080b79f2b
18 changed files with 85 additions and 247 deletions
|
@ -1169,15 +1169,9 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
|||
}
|
||||
|
||||
/// Decodes all trait impls in the crate (for rustdoc).
|
||||
fn get_trait_impls(self) -> impl Iterator<Item = (DefId, DefId, Option<SimplifiedType>)> + 'a {
|
||||
self.cdata.trait_impls.iter().flat_map(move |(&(trait_cnum_raw, trait_index), impls)| {
|
||||
let trait_def_id = DefId {
|
||||
krate: self.cnum_map[CrateNum::from_u32(trait_cnum_raw)],
|
||||
index: trait_index,
|
||||
};
|
||||
impls.decode(self).map(move |(impl_index, simplified_self_ty)| {
|
||||
(trait_def_id, self.local_def_id(impl_index), simplified_self_ty)
|
||||
})
|
||||
fn get_trait_impls(self) -> impl Iterator<Item = DefId> + 'a {
|
||||
self.cdata.trait_impls.values().flat_map(move |impls| {
|
||||
impls.decode(self).map(move |(impl_index, _)| self.local_def_id(impl_index))
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -304,6 +304,7 @@ provide! { tcx, def_id, other, cdata,
|
|||
extra_filename => { cdata.root.extra_filename.clone() }
|
||||
|
||||
traits_in_crate => { tcx.arena.alloc_from_iter(cdata.get_traits()) }
|
||||
trait_impls_in_crate => { tcx.arena.alloc_from_iter(cdata.get_trait_impls()) }
|
||||
implementations_of_trait => { cdata.get_implementations_of_trait(tcx, other) }
|
||||
crate_incoherent_impls => { cdata.get_incoherent_impls(tcx, other) }
|
||||
|
||||
|
@ -608,20 +609,6 @@ impl CStore {
|
|||
) -> Span {
|
||||
self.get_crate_data(cnum).get_proc_macro_quoted_span(id, sess)
|
||||
}
|
||||
|
||||
/// Decodes all trait impls in the crate (for rustdoc).
|
||||
pub fn trait_impls_in_crate_untracked(
|
||||
&self,
|
||||
cnum: CrateNum,
|
||||
) -> impl Iterator<Item = (DefId, DefId, Option<SimplifiedType>)> + '_ {
|
||||
self.get_crate_data(cnum).get_trait_impls()
|
||||
}
|
||||
|
||||
pub fn is_doc_hidden_untracked(&self, def_id: DefId) -> bool {
|
||||
self.get_crate_data(def_id.krate)
|
||||
.get_attr_flags(def_id.index)
|
||||
.contains(AttrFlags::IS_DOC_HIDDEN)
|
||||
}
|
||||
}
|
||||
|
||||
impl CrateStore for CStore {
|
||||
|
|
|
@ -2256,6 +2256,22 @@ pub fn provide(providers: &mut Providers) {
|
|||
traits.sort_by_cached_key(|&def_id| tcx.def_path_hash(def_id));
|
||||
tcx.arena.alloc_slice(&traits)
|
||||
},
|
||||
trait_impls_in_crate: |tcx, cnum| {
|
||||
assert_eq!(cnum, LOCAL_CRATE);
|
||||
|
||||
let mut trait_impls = Vec::new();
|
||||
for id in tcx.hir().items() {
|
||||
if matches!(tcx.def_kind(id.owner_id), DefKind::Impl)
|
||||
&& tcx.impl_trait_ref(id.owner_id).is_some()
|
||||
{
|
||||
trait_impls.push(id.owner_id.to_def_id())
|
||||
}
|
||||
}
|
||||
|
||||
// Bring everything into deterministic order.
|
||||
trait_impls.sort_by_cached_key(|&def_id| tcx.def_path_hash(def_id));
|
||||
tcx.arena.alloc_slice(&trait_impls)
|
||||
},
|
||||
|
||||
..*providers
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue