Struct rustc_resolve::ModuleData
source · pub(crate) struct ModuleData<'a> {
pub(crate) parent: Option<Module<'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<Interned<'a, ImportData<'a>>>>,
pub(crate) globs: RefCell<Vec<Interned<'a, ImportData<'a>>>>,
pub(crate) traits: RefCell<Option<Box<[(Ident, Interned<'a, NameBindingData<'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<Module<'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<Interned<'a, ImportData<'a>>>>
§globs: RefCell<Vec<Interned<'a, ImportData<'a>>>>
§traits: RefCell<Option<Box<[(Ident, Interned<'a, NameBindingData<'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§
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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
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