Skip to main content

CrateMetadata

Struct CrateMetadata 

Source
pub(crate) struct CrateMetadata {
Show 19 fields blob: MetadataBlob, root: CrateRoot, trait_impls: FxIndexMap<(u32, DefIndex), LazyArray<(DefIndex, Option<SimplifiedType>)>>, incoherent_impls: FxIndexMap<SimplifiedType, LazyArray<DefIndex>>, raw_proc_macros: Option<&'static [ProcMacro]>, source_map_import_info: Lock<Vec<Option<ImportedSourceFile>>>, def_path_hash_map: DefPathHashMapRef<'static>, expn_hash_map: OnceLock<UnhashMap<ExpnHash, ExpnIndex>>, alloc_decoding_state: AllocDecodingState, def_key_cache: Lock<FxHashMap<DefIndex, DefKey>>, cnum: CrateNum, cnum_map: IndexVec<CrateNum, CrateNum>, dep_kind: CrateDepKind, source: Arc<CrateSource>, private_dep: bool, host_hash: Option<Svh>, used: bool, hygiene_context: HygieneDecodeContext, extern_crate: Option<ExternCrate>,
}

Fields§

§blob: MetadataBlob

The primary crate data - binary metadata blob.

§root: CrateRoot

Data about the top-level items in a crate, as well as various crate-level metadata.

§trait_impls: FxIndexMap<(u32, DefIndex), LazyArray<(DefIndex, Option<SimplifiedType>)>>

Trait impl data. FIXME: Used only from queries and can use query cache, so pre-decoding can probably be avoided.

§incoherent_impls: FxIndexMap<SimplifiedType, LazyArray<DefIndex>>

Inherent impls which do not follow the normal coherence rules.

These can be introduced using either #![rustc_coherence_is_core] or #[rustc_allow_incoherent_impl].

§raw_proc_macros: Option<&'static [ProcMacro]>

Proc macro descriptions for this crate, if it’s a proc macro crate.

§source_map_import_info: Lock<Vec<Option<ImportedSourceFile>>>

Source maps for code from the crate.

§def_path_hash_map: DefPathHashMapRef<'static>

For every definition in this crate, maps its DefPathHash to its DefIndex.

§expn_hash_map: OnceLock<UnhashMap<ExpnHash, ExpnIndex>>

Likewise for ExpnHash.

§alloc_decoding_state: AllocDecodingState

Used for decoding interpret::AllocIds in a cached & thread-safe manner.

§def_key_cache: Lock<FxHashMap<DefIndex, DefKey>>

Caches decoded DefKeys.

§cnum: CrateNum

ID of this crate, from the current compilation session’s point of view.

§cnum_map: IndexVec<CrateNum, CrateNum>

Maps crate IDs as they are were seen from this crate’s compilation sessions into IDs as they are seen from the current compilation session.

§dep_kind: CrateDepKind

How to link (or not link) this crate to the currently compiled crate.

§source: Arc<CrateSource>

Filesystem location of this crate.

§private_dep: bool

Whether or not this crate should be consider a private dependency. Used by the ‘exported_private_dependencies’ lint, and for determining whether to emit suggestions that reference this crate.

§host_hash: Option<Svh>

The hash for the host proc macro. Used to support -Z dual-proc-macro.

§used: bool

The crate was used non-speculatively.

§hygiene_context: HygieneDecodeContext

Additional data used for decoding HygieneData (e.g. SyntaxContext and ExpnId). Note that we store a HygieneDecodeContext for each CrateMetadata. This is because SyntaxContext ids are not globally unique, so we need to track which ids we’ve decoded on a per-crate basis.

§extern_crate: Option<ExternCrate>

Information about the extern crate item or path that caused this crate to be loaded. If this is None, then the crate was injected (e.g., by the allocator).

Implementations§

Source§

impl CrateMetadata

Source

fn missing(&self, descr: &str, id: DefIndex) -> !

Source

fn raw_proc_macro(&self, tcx: TyCtxt<'_>, id: DefIndex) -> &ProcMacro

Source

fn opt_item_name(&self, item_index: DefIndex) -> Option<Symbol>

Source

fn item_name(&self, item_index: DefIndex) -> Symbol

Source

fn opt_item_ident(&self, tcx: TyCtxt<'_>, item_index: DefIndex) -> Option<Ident>

Source

fn item_ident(&self, tcx: TyCtxt<'_>, item_index: DefIndex) -> Ident

Source

pub(super) fn map_encoded_cnum_to_current(&self, cnum: CrateNum) -> CrateNum

Source

fn def_kind(&self, item_id: DefIndex) -> DefKind

Source

fn get_span(&self, tcx: TyCtxt<'_>, index: DefIndex) -> Span

Source

fn load_proc_macro<'tcx>( &self, tcx: TyCtxt<'tcx>, id: DefIndex, ) -> SyntaxExtension

Source

fn get_variant( &self, tcx: TyCtxt<'_>, kind: DefKind, index: DefIndex, parent_did: DefId, ) -> (VariantIdx, VariantDef)

Source

fn get_adt_def<'tcx>( &self, tcx: TyCtxt<'tcx>, item_id: DefIndex, ) -> AdtDef<'tcx>

Source

fn get_visibility(&self, tcx: TyCtxt<'_>, id: DefIndex) -> Visibility<DefId>

Source

fn get_safety(&self, id: DefIndex) -> Safety

Source

fn get_default_field(&self, tcx: TyCtxt<'_>, id: DefIndex) -> Option<DefId>

Source

fn get_expn_that_defined(&self, tcx: TyCtxt<'_>, id: DefIndex) -> ExpnId

Source

fn get_debugger_visualizers( &self, tcx: TyCtxt<'_>, ) -> Vec<DebuggerVisualizerFile>

Source

fn get_lib_features(&self, tcx: TyCtxt<'_>) -> LibFeatures

Iterates over all the stability attributes in the given crate.

Source

fn get_stability_implications<'tcx>( &self, tcx: TyCtxt<'tcx>, ) -> &'tcx [(Symbol, Symbol)]

Iterates over the stability implications in the given crate (when a #[unstable] attribute has an implied_by meta item, then the mapping from the implied feature to the actual feature is a stability implication).

Source

fn get_lang_items<'tcx>(&self, tcx: TyCtxt<'tcx>) -> &'tcx [(DefId, LangItem)]

Iterates over the lang items in the given crate.

Source

fn get_stripped_cfg_items<'tcx>( &self, tcx: TyCtxt<'tcx>, cnum: CrateNum, ) -> &'tcx [StrippedCfgItem]

Source

fn get_diagnostic_items(&self, tcx: TyCtxt<'_>) -> DiagnosticItems

Iterates over the diagnostic items in the given crate.

Source

fn get_mod_child(&self, tcx: TyCtxt<'_>, id: DefIndex) -> ModChild

Source

fn get_module_children( &self, tcx: TyCtxt<'_>, id: DefIndex, ) -> impl Iterator<Item = ModChild>

Iterates over all named children of the given module, including both proper items and reexports. Module here is understood in name resolution sense - it can be a mod item, or a crate root, or an enum, or a trait.

Source

fn get_ambig_module_children( &self, tcx: TyCtxt<'_>, id: DefIndex, ) -> impl Iterator<Item = AmbigModChild>

Source

fn is_item_mir_available(&self, id: DefIndex) -> bool

Source

fn get_fn_has_self_parameter(&self, tcx: TyCtxt<'_>, id: DefIndex) -> bool

Source

fn get_associated_item_or_field_def_ids( &self, tcx: TyCtxt<'_>, id: DefIndex, ) -> impl Iterator<Item = DefId>

Source

fn get_associated_item(&self, tcx: TyCtxt<'_>, id: DefIndex) -> AssocItem

Source

fn get_ctor( &self, tcx: TyCtxt<'_>, node_id: DefIndex, ) -> Option<(CtorKind, DefId)>

Source

fn get_item_attrs( &self, tcx: TyCtxt<'_>, id: DefIndex, ) -> impl Iterator<Item = Attribute>

Source

fn get_inherent_implementations_for_type<'tcx>( &self, tcx: TyCtxt<'tcx>, id: DefIndex, ) -> &'tcx [DefId]

Source

fn get_traits(&self, tcx: TyCtxt<'_>) -> impl Iterator<Item = DefId>

Decodes all traits in the crate (for rustdoc and rustc diagnostics).

Source

fn get_trait_impls(&self, tcx: TyCtxt<'_>) -> impl Iterator<Item = DefId>

Decodes all trait impls in the crate (for rustdoc).

Source

fn get_incoherent_impls<'tcx>( &self, tcx: TyCtxt<'tcx>, simp: SimplifiedType, ) -> &'tcx [DefId]

Source

fn get_implementations_of_trait<'tcx>( &self, tcx: TyCtxt<'tcx>, trait_def_id: DefId, ) -> &'tcx [(DefId, Option<SimplifiedType>)]

Source

fn get_native_libraries( &self, tcx: TyCtxt<'_>, ) -> impl Iterator<Item = NativeLib>

Source

fn get_proc_macro_quoted_span(&self, tcx: TyCtxt<'_>, index: usize) -> Span

Source

fn get_foreign_modules( &self, tcx: TyCtxt<'_>, ) -> impl Iterator<Item = ForeignModule>

Source

fn get_dylib_dependency_formats<'tcx>( &self, tcx: TyCtxt<'tcx>, ) -> &'tcx [(CrateNum, LinkagePreference)]

Source

fn get_externally_implementable_items( &self, tcx: TyCtxt<'_>, ) -> impl Iterator<Item = (DefId, (EiiDecl, Vec<(DefId, EiiImpl)>))>

Source

fn get_missing_lang_items<'tcx>(&self, tcx: TyCtxt<'tcx>) -> &'tcx [LangItem]

Source

fn get_exportable_items(&self, tcx: TyCtxt<'_>) -> impl Iterator<Item = DefId>

Source

fn get_stable_order_of_exportable_impls( &self, tcx: TyCtxt<'_>, ) -> impl Iterator<Item = (DefId, usize)>

Source

fn exported_non_generic_symbols<'tcx>( &self, tcx: TyCtxt<'tcx>, ) -> &'tcx [(ExportedSymbol<'tcx>, SymbolExportInfo)]

Source

fn exported_generic_symbols<'tcx>( &self, tcx: TyCtxt<'tcx>, ) -> &'tcx [(ExportedSymbol<'tcx>, SymbolExportInfo)]

Source

fn get_macro(&self, tcx: TyCtxt<'_>, id: DefIndex) -> MacroDef

Source

fn def_key(&self, index: DefIndex) -> DefKey

Source

fn def_path(&self, id: DefIndex) -> DefPath

Source

fn def_path_hash(&self, index: DefIndex) -> DefPathHash

Source

fn def_path_hash_to_def_index(&self, hash: DefPathHash) -> Option<DefIndex>

Source

fn expn_hash_to_expn_id( &self, tcx: TyCtxt<'_>, index_guess: u32, hash: ExpnHash, ) -> ExpnId

Source

fn imported_source_file( &self, tcx: TyCtxt<'_>, source_file_index: u32, ) -> ImportedSourceFile

Imports the source_map from an external crate into the source_map of the crate currently being compiled (the “local crate”).

The import algorithm works analogous to how AST items are inlined from an external crate’s metadata: For every SourceFile in the external source_map an ‘inline’ copy is created in the local source_map. The correspondence relation between external and local SourceFiles is recorded in the ImportedSourceFile objects returned from this function. When an item from an external crate is later inlined into this crate, this correspondence information is used to translate the span information of the inlined item so that it refers the correct positions in the local source_map (see <decoder::DecodeContext as SpecializedDecoder<Span>>).

The import algorithm in the function below will reuse SourceFiles already existing in the local source_map. For example, even if the SourceFile of some source file of libstd gets imported many times, there will only ever be one SourceFile object for the corresponding file in the local source_map.

Note that imported SourceFiles do not actually contain the source code of the file they represent, just information about length, line breaks, and multibyte characters. This information is enough to generate valid debuginfo for items inlined from other crates.

Proc macro crates don’t currently export spans, so this function does not have to work for them.

Source

fn get_attr_flags(&self, index: DefIndex) -> AttrFlags

Source

fn get_intrinsic( &self, tcx: TyCtxt<'_>, index: DefIndex, ) -> Option<IntrinsicDef>

Source§

impl CrateMetadata

Source

pub(crate) fn new( tcx: TyCtxt<'_>, blob: MetadataBlob, root: CrateRoot, raw_proc_macros: Option<&'static [ProcMacro]>, cnum: CrateNum, cnum_map: IndexVec<CrateNum, CrateNum>, dep_kind: CrateDepKind, source: CrateSource, private_dep: bool, host_hash: Option<Svh>, ) -> CrateMetadata

Source

pub(crate) fn dependencies(&self) -> impl Iterator<Item = CrateNum>

Source

pub(crate) fn target_modifiers(&self) -> Vec<TargetModifier>

Source

pub(crate) fn enabled_denied_partial_mitigations( &self, ) -> Vec<DeniedPartialMitigation>

Source

pub(crate) fn update_extern_crate_diagnostics( &mut self, new_extern_crate: ExternCrate, ) -> bool

Keep new_extern_crate if it looks better in diagnostics

Source

pub(crate) fn source(&self) -> &CrateSource

Source

pub(crate) fn dep_kind(&self) -> CrateDepKind

Source

pub(crate) fn set_dep_kind(&mut self, dep_kind: CrateDepKind)

Source

pub(crate) fn update_and_private_dep(&mut self, private_dep: bool)

Source

pub(crate) fn used(&self) -> bool

Source

pub(crate) fn required_panic_strategy(&self) -> Option<PanicStrategy>

Source

pub(crate) fn needs_panic_runtime(&self) -> bool

Source

pub(crate) fn is_private_dep(&self) -> bool

Source

pub(crate) fn is_panic_runtime(&self) -> bool

Source

pub(crate) fn is_profiler_runtime(&self) -> bool

Source

pub(crate) fn is_compiler_builtins(&self) -> bool

Source

pub(crate) fn needs_allocator(&self) -> bool

Source

pub(crate) fn has_global_allocator(&self) -> bool

Source

pub(crate) fn has_alloc_error_handler(&self) -> bool

Source

pub(crate) fn has_default_lib_allocator(&self) -> bool

Source

pub(crate) fn is_proc_macro_crate(&self) -> bool

Source

pub(crate) fn proc_macros_for_crate( &self, tcx: TyCtxt<'_>, krate: CrateNum, ) -> impl Iterator<Item = DefId>

Source

pub(crate) fn name(&self) -> Symbol

Source

pub(crate) fn hash(&self) -> Svh

Source

pub(crate) fn has_async_drops(&self) -> bool

Source

fn num_def_ids(&self) -> usize

Source

fn local_def_id(&self, index: DefIndex) -> DefId

Source

fn reverse_translate_def_id(&self, did: DefId) -> Option<DefId>

Trait Implementations§

Source§

impl<'a> MetaBlob<'a> for &'a CrateMetadata

Source§

fn blob(&self) -> &'a MetadataBlob

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Aligned for T

Source§

const ALIGN: Alignment

Alignment of Self.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, R> CollectAndApply<T, R> for T

Source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

Source§

type Output = R

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<K> IntoQueryKey<K> for K

Source§

fn into_query_key(self) -> K

Argument conversion from Self to K. This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.
Source§

impl<T> MaybeResult<T> for T

Source§

type Error = !

Source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

Source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

Source§

fn upcast(self, interner: I) -> U

Source§

impl<I, T> UpcastFrom<I, T> for T

Source§

fn upcast_from(from: T, _tcx: I) -> T

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

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: 3040 bytes