Rollup merge of #122771 - RalfJung:module-items, r=oli-obk
add some comments to hir::ModuleItems I've definitely been bitten by this in the past, where I assumed `items()` would give me *all* the items.
This commit is contained in:
commit
7938ce6677
9 changed files with 27 additions and 19 deletions
|
@ -166,12 +166,12 @@ impl<'hir> Map<'hir> {
|
|||
|
||||
#[inline]
|
||||
pub fn items(self) -> impl Iterator<Item = ItemId> + 'hir {
|
||||
self.tcx.hir_crate_items(()).items.iter().copied()
|
||||
self.tcx.hir_crate_items(()).free_items.iter().copied()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn module_items(self, module: LocalModDefId) -> impl Iterator<Item = ItemId> + 'hir {
|
||||
self.tcx.hir_module_items(module).items()
|
||||
self.tcx.hir_module_items(module).free_items()
|
||||
}
|
||||
|
||||
pub fn def_key(self, def_id: LocalDefId) -> DefKey {
|
||||
|
@ -418,7 +418,7 @@ impl<'hir> Map<'hir> {
|
|||
V: Visitor<'hir>,
|
||||
{
|
||||
let krate = self.tcx.hir_crate_items(());
|
||||
walk_list!(visitor, visit_item, krate.items().map(|id| self.item(id)));
|
||||
walk_list!(visitor, visit_item, krate.free_items().map(|id| self.item(id)));
|
||||
walk_list!(visitor, visit_trait_item, krate.trait_items().map(|id| self.trait_item(id)));
|
||||
walk_list!(visitor, visit_impl_item, krate.impl_items().map(|id| self.impl_item(id)));
|
||||
walk_list!(
|
||||
|
@ -436,7 +436,7 @@ impl<'hir> Map<'hir> {
|
|||
V: Visitor<'hir>,
|
||||
{
|
||||
let module = self.tcx.hir_module_items(module);
|
||||
walk_list!(visitor, visit_item, module.items().map(|id| self.item(id)));
|
||||
walk_list!(visitor, visit_item, module.free_items().map(|id| self.item(id)));
|
||||
walk_list!(visitor, visit_trait_item, module.trait_items().map(|id| self.trait_item(id)));
|
||||
walk_list!(visitor, visit_impl_item, module.impl_items().map(|id| self.impl_item(id)));
|
||||
walk_list!(
|
||||
|
@ -1197,7 +1197,7 @@ pub(super) fn hir_module_items(tcx: TyCtxt<'_>, module_id: LocalModDefId) -> Mod
|
|||
} = collector;
|
||||
return ModuleItems {
|
||||
submodules: submodules.into_boxed_slice(),
|
||||
items: items.into_boxed_slice(),
|
||||
free_items: items.into_boxed_slice(),
|
||||
trait_items: trait_items.into_boxed_slice(),
|
||||
impl_items: impl_items.into_boxed_slice(),
|
||||
foreign_items: foreign_items.into_boxed_slice(),
|
||||
|
@ -1226,7 +1226,7 @@ pub(crate) fn hir_crate_items(tcx: TyCtxt<'_>, _: ()) -> ModuleItems {
|
|||
|
||||
return ModuleItems {
|
||||
submodules: submodules.into_boxed_slice(),
|
||||
items: items.into_boxed_slice(),
|
||||
free_items: items.into_boxed_slice(),
|
||||
trait_items: trait_items.into_boxed_slice(),
|
||||
impl_items: impl_items.into_boxed_slice(),
|
||||
foreign_items: foreign_items.into_boxed_slice(),
|
||||
|
|
|
@ -22,7 +22,7 @@ use rustc_span::{ErrorGuaranteed, ExpnId};
|
|||
#[derive(Debug, HashStable, Encodable, Decodable)]
|
||||
pub struct ModuleItems {
|
||||
submodules: Box<[OwnerId]>,
|
||||
items: Box<[ItemId]>,
|
||||
free_items: Box<[ItemId]>,
|
||||
trait_items: Box<[TraitItemId]>,
|
||||
impl_items: Box<[ImplItemId]>,
|
||||
foreign_items: Box<[ForeignItemId]>,
|
||||
|
@ -30,14 +30,22 @@ pub struct ModuleItems {
|
|||
}
|
||||
|
||||
impl ModuleItems {
|
||||
pub fn items(&self) -> impl Iterator<Item = ItemId> + '_ {
|
||||
self.items.iter().copied()
|
||||
/// Returns all non-associated locally defined items in all modules.
|
||||
///
|
||||
/// Note that this does *not* include associated items of `impl` blocks! It also does not
|
||||
/// include foreign items. If you want to e.g. get all functions, use `definitions()` below.
|
||||
///
|
||||
/// However, this does include the `impl` blocks themselves.
|
||||
pub fn free_items(&self) -> impl Iterator<Item = ItemId> + '_ {
|
||||
self.free_items.iter().copied()
|
||||
}
|
||||
|
||||
pub fn trait_items(&self) -> impl Iterator<Item = TraitItemId> + '_ {
|
||||
self.trait_items.iter().copied()
|
||||
}
|
||||
|
||||
/// Returns all items that are associated with some `impl` block (both inherent and trait impl
|
||||
/// blocks).
|
||||
pub fn impl_items(&self) -> impl Iterator<Item = ImplItemId> + '_ {
|
||||
self.impl_items.iter().copied()
|
||||
}
|
||||
|
@ -47,7 +55,7 @@ impl ModuleItems {
|
|||
}
|
||||
|
||||
pub fn owners(&self) -> impl Iterator<Item = OwnerId> + '_ {
|
||||
self.items
|
||||
self.free_items
|
||||
.iter()
|
||||
.map(|id| id.owner_id)
|
||||
.chain(self.trait_items.iter().map(|id| id.owner_id))
|
||||
|
@ -63,7 +71,7 @@ impl ModuleItems {
|
|||
&self,
|
||||
f: impl Fn(ItemId) -> Result<(), ErrorGuaranteed> + DynSend + DynSync,
|
||||
) -> Result<(), ErrorGuaranteed> {
|
||||
try_par_for_each_in(&self.items[..], |&id| f(id))
|
||||
try_par_for_each_in(&self.free_items[..], |&id| f(id))
|
||||
}
|
||||
|
||||
pub fn par_trait_items(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue