Struct rustc_resolve::ModuleData
source · pub struct ModuleData<'a> {
pub(crate) parent: Option<&'a ModuleData<'a>>,
pub(crate) kind: ModuleKind,
pub(crate) lazy_resolutions: RefCell<FxIndexMap<BindingKey, &'a RefCell<NameResolution<'a>>>>,
pub(crate) populate_on_access: Cell<bool>,
pub(crate) unexpanded_invocations: RefCell<FxHashSet<LocalExpnId>>,
pub(crate) no_implicit_prelude: bool,
pub(crate) glob_importers: RefCell<Vec<&'a Import<'a>>>,
pub(crate) globs: RefCell<Vec<&'a Import<'a>>>,
pub(crate) traits: RefCell<Option<Box<[(Ident, &'a NameBinding<'a>)]>>>,
pub(crate) span: Span,
pub(crate) expansion: ExpnId,
}
Expand description
One node in the tree of modules.
Note that a “module” in resolve is broader than a mod
that you declare in Rust code. It may be one of these:
mod
- crate root (aka, top-level anonymous module)
enum
trait
- curly-braced block with statements
You can use ModuleData::kind
to determine the kind of module this is.
Fields§
§parent: Option<&'a ModuleData<'a>>
The direct parent module (it may not be a mod
, however).
kind: ModuleKind
What kind of module this is, because this may not be a mod
.
lazy_resolutions: RefCell<FxIndexMap<BindingKey, &'a RefCell<NameResolution<'a>>>>
Mapping between names and their (possibly in-progress) resolutions in this module. Resolutions in modules from other crates are not populated until accessed.
populate_on_access: Cell<bool>
True if this is a module from other crate that needs to be populated on access.
unexpanded_invocations: RefCell<FxHashSet<LocalExpnId>>
Macro invocations that can expand into items in this module.
no_implicit_prelude: bool
Whether #[no_implicit_prelude]
is active.
glob_importers: RefCell<Vec<&'a Import<'a>>>
§globs: RefCell<Vec<&'a Import<'a>>>
§traits: RefCell<Option<Box<[(Ident, &'a NameBinding<'a>)]>>>
Used to memoize the traits in this module for faster searches through all traits in scope.
span: Span
Span of the module itself. Used for error reporting.
expansion: ExpnId
Implementations§
source§impl<'a> ModuleData<'a>
impl<'a> ModuleData<'a>
pub(crate) fn new(
parent: Option<&'a ModuleData<'a>>,
kind: ModuleKind,
expansion: ExpnId,
span: Span,
no_implicit_prelude: bool
) -> Self
pub(crate) fn for_each_child<R, F>(&'a self, resolver: &mut R, f: F)where
R: AsMut<Resolver<'a>>,
F: FnMut(&mut R, Ident, Namespace, &'a NameBinding<'a>),
sourcepub(crate) fn ensure_traits<R>(&'a self, resolver: &mut R)where
R: AsMut<Resolver<'a>>,
pub(crate) fn ensure_traits<R>(&'a self, resolver: &mut R)where
R: AsMut<Resolver<'a>>,
This modifies self
in place. The traits will be stored in self.traits
.
pub(crate) fn res(&self) -> Option<Res<NodeId>>
pub fn def_id(&self) -> DefId
pub(crate) fn opt_def_id(&self) -> Option<DefId>
pub(crate) fn is_normal(&self) -> bool
pub(crate) fn is_trait(&self) -> bool
pub(crate) fn nearest_item_scope(&'a self) -> &'a ModuleData<'a>
sourcepub(crate) fn nearest_parent_mod(&self) -> DefId
pub(crate) fn nearest_parent_mod(&self) -> DefId
The DefId
of the nearest mod
item ancestor (which may be this module).
This may be the crate root.
pub(crate) fn is_ancestor_of(&self, other: &Self) -> bool
Trait Implementations§
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for ModuleData<'a>
impl<'a> !Send for ModuleData<'a>
impl<'a> !Sync for ModuleData<'a>
impl<'a> Unpin for ModuleData<'a>
impl<'a> !UnwindSafe for ModuleData<'a>
Blanket Implementations§
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 240 bytes