ItemKind in rustc_hir::hir - Rust
Description: API documentation for the Rust `ItemKind` enum in crate `rustc_hir`.

Skip to main content

## ItemKind

# Enum ItemKind

Source

    pub enum ItemKind<'hir> {
    Show 16 variants    ExternCrate(Option<Symbol>, Ident),
        Use(&'hir UsePath<'hir>, UseKind),
        Static(Mutability, Ident, &'hir Ty<'hir>, BodyId),
        Const(Ident, &'hir Generics<'hir>, &'hir Ty<'hir>, ConstItemRhs<'hir>),
        Fn {
            sig: FnSig<'hir>,
            ident: Ident,
            generics: &'hir Generics<'hir>,
            body: BodyId,
            has_body: bool,
        },
        Macro(Ident, &'hir MacroDef, MacroKinds),
        Mod(Ident, &'hir Mod<'hir>),
        ForeignMod {
            abi: ExternAbi,
            items: &'hir [ForeignItemId],
        },
        GlobalAsm {
            asm: &'hir InlineAsm<'hir>,
            fake_body: BodyId,
        },
        TyAlias(Ident, &'hir Generics<'hir>, &'hir Ty<'hir>),
        Enum(Ident, &'hir Generics<'hir>, EnumDef<'hir>),
        Struct(Ident, &'hir Generics<'hir>, VariantData<'hir>),
        Union(Ident, &'hir Generics<'hir>, VariantData<'hir>),
        Trait {
            impl_restriction: &'hir ImplRestriction<'hir>,
            constness: Constness,
            is_auto: IsAuto,
            safety: Safety,
            ident: Ident,
            generics: &'hir Generics<'hir>,
            bounds: GenericBounds<'hir>,
            items: &'hir [TraitItemId],
        },
        TraitAlias(Constness, Ident, &'hir Generics<'hir>, GenericBounds<'hir>),
        Impl(Impl<'hir>),
    }

## Variants§

§

### ExternCrate(Option<Symbol>, Ident)

An `extern crate` item, with optional original crate name if the crate was renamed.

E.g., `extern crate foo` or `extern crate foo_bar as foo`.

§

### Use(&'hir UsePath<'hir>, UseKind)

`use foo::bar::*;` or `use foo::bar::baz as quux;`

or just

`use foo::bar::baz;` (with `as baz` implicitly on the right).

§

### Static(Mutability, Ident, &'hir Ty<'hir>, BodyId)

A `static` item.

§

### Const(Ident, &'hir Generics<'hir>, &'hir Ty<'hir>, ConstItemRhs<'hir>)

A `const` item.

§

### Fn

A function declaration.

#### Fields

§`sig: FnSig<'hir>`
§`ident: Ident`
§`generics: &'hir Generics<'hir>`
§`body: BodyId`
§`has_body: bool`

Whether this function actually has a body. For functions without a body, `body` is synthesized (to avoid ICEs all over the compiler), but that code should never be translated.

§

### Macro(Ident, &'hir MacroDef, MacroKinds)

A MBE macro definition (`macro_rules!` or `macro`).

§

### Mod(Ident, &'hir Mod<'hir>)

A module.

§

### ForeignMod

An external module, e.g. `extern { .. }`.

#### Fields

§`abi: ExternAbi`
§`items: &'hir [ForeignItemId]`
§

### GlobalAsm

Module-level inline assembly (from `global_asm!`).

#### Fields

§`asm: &'hir InlineAsm<'hir>`
§`fake_body: BodyId`

A fake body which stores typeck results for the global asm’s sym_fn operands, which are represented as path expressions. This body contains a single `ExprKind::InlineAsm` which points to the asm in the field above, and which is typechecked like a inline asm expr just for the typeck results.

§

### TyAlias(Ident, &'hir Generics<'hir>, &'hir Ty<'hir>)

A type alias, e.g., `type Foo = Bar<u8>`.

§

### Enum(Ident, &'hir Generics<'hir>, EnumDef<'hir>)

An enum definition, e.g., `enum Foo<A, B> { C<A>, D<B> }`.

§

### Struct(Ident, &'hir Generics<'hir>, VariantData<'hir>)

A struct definition, e.g., `struct Foo<A> {x: A}`.

§

### Union(Ident, &'hir Generics<'hir>, VariantData<'hir>)

A union definition, e.g., `union Foo<A, B> {x: A, y: B}`.

§

### Trait

A trait definition.

#### Fields

§`impl_restriction: &'hir ImplRestriction<'hir>`
§`constness: Constness`
§`is_auto: IsAuto`
§`safety: Safety`
§`ident: Ident`
§`generics: &'hir Generics<'hir>`
§`bounds: GenericBounds<'hir>`
§`items: &'hir [TraitItemId]`
§

### TraitAlias(Constness, Ident, &'hir Generics<'hir>, GenericBounds<'hir>)

A trait alias.

§

### Impl(Impl<'hir>)

An implementation, e.g., `impl<A> Trait for Foo { .. }`.

## Implementations§

Source§

### impl ItemKind<'_>

Source

#### pub fn ident(&self) -> Option<Ident>

Source

#### pub fn generics(&self) -> Option<&Generics<'_>>

Source

#### pub fn recovered(&self) -> bool

## Trait Implementations§

Source§

### impl<'hir> Clone for ItemKind<'hir>

Source§

#### fn clone(&self) -> ItemKind<'hir>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

#### fn clone_from(&mut self, source: &Self)

Performs copy-assignment from `source`. Read more
Source§

### impl<'hir> Debug for ItemKind<'hir>

Source§

#### fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

### impl<'hir> StableHash for ItemKind<'hir>

Source§

#### fn stable_hash<__Hcx: StableHashCtxt>( &self, __hcx: &mut __Hcx, __hasher: &mut StableHasher, )

Source§

### impl<'hir> Copy for ItemKind<'hir>

## Auto Trait Implementations§

§

### impl<'hir> DynSend for ItemKind<'hir>

§

### impl<'hir> DynSync for ItemKind<'hir>

§

### impl<'hir> Freeze for ItemKind<'hir>

§

### impl<'hir> RefUnwindSafe for ItemKind<'hir>

§

### impl<'hir> Send for ItemKind<'hir>

§

### impl<'hir> Sync for ItemKind<'hir>

§

### impl<'hir> Unpin for ItemKind<'hir>

§

### impl<'hir> UnsafeUnpin for ItemKind<'hir>

§

### impl<'hir> UnwindSafe for ItemKind<'hir>

## 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<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for T
where T: Copy,

Source§

#### fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T

Source§

#### fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]

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> CloneToUninit for T
where T: Clone,

Source§

#### unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (`clone_to_uninit`)
Performs copy-assignment from `self` to `dest`. Read more
Source§

### impl<T> DynClone for T
where T: Clone,

Source§

#### fn __clone_box(&self, _: Private) -> *mut ()

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<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> ToOwned for T
where T: Clone,

Source§

#### type Owned = T

The resulting type after obtaining ownership.
Source§

#### fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

#### fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<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: 64 bytes

Size for each variant:

- `ExternCrate`: 19 bytes
- `Use`: 23 bytes
- `Static`: 31 bytes
- `Const`: 47 bytes
- `Fn`: 63 bytes
- `Macro`: 23 bytes
- `Mod`: 23 bytes
- `ForeignMod`: 23 bytes
- `GlobalAsm`: 23 bytes
- `TyAlias`: 31 bytes
- `Enum`: 39 bytes
- `Struct`: 55 bytes
- `Union`: 55 bytes
- `Trait`: 63 bytes
- `TraitAlias`: 39 bytes
- `Impl`: 55 bytes