| # Items |
| |
| r[items] |
| |
| r[items.syntax] |
| > **<sup>Syntax:<sup>**\ |
| > _Item_:\ |
| > [_OuterAttribute_]<sup>\*</sup>\ |
| > _VisItem_\ |
| > | _MacroItem_ |
| > |
| > _VisItem_:\ |
| > [_Visibility_]<sup>?</sup>\ |
| > (\ |
| > [_Module_]\ |
| > | [_ExternCrate_]\ |
| > | [_UseDeclaration_]\ |
| > | [_Function_]\ |
| > | [_TypeAlias_]\ |
| > | [_Struct_]\ |
| > | [_Enumeration_]\ |
| > | [_Union_]\ |
| > | [_ConstantItem_]\ |
| > | [_StaticItem_]\ |
| > | [_Trait_]\ |
| > | [_Implementation_]\ |
| > | [_ExternBlock_]\ |
| > ) |
| > |
| > _MacroItem_:\ |
| > [_MacroInvocationSemi_]\ |
| > | [_MacroRulesDefinition_] |
| |
| r[items.intro] |
| An _item_ is a component of a crate. Items are organized within a crate by a |
| nested set of [modules]. Every crate has a single "outermost" anonymous module; |
| all further items within the crate have [paths] within the module tree of the |
| crate. |
| |
| r[items.static-def] |
| Items are entirely determined at compile-time, generally remain fixed during |
| execution, and may reside in read-only memory. |
| |
| r[items.kinds] |
| There are several kinds of items: |
| |
| * [modules] |
| * [`extern crate` declarations] |
| * [`use` declarations] |
| * [function definitions] |
| * [type definitions] |
| * [struct definitions] |
| * [enumeration definitions] |
| * [union definitions] |
| * [constant items] |
| * [static items] |
| * [trait definitions] |
| * [implementations] |
| * [`extern` blocks] |
| |
| r[items.locations] |
| Items may be declared in the [root of the crate], a [module][modules], or a [block expression]. |
| |
| r[items.associated-locations] |
| A subset of items, called [associated items], may be declared in [traits] and [implementations]. |
| |
| r[items.extern-locations] |
| A subset of items, called external items, may be declared in [`extern` blocks]. |
| |
| r[items.decl-order] |
| Items may be defined in any order, with the exception of [`macro_rules`] which has its own scoping behavior. |
| |
| r[items.name-resolution] |
| [Name resolution] of item names allows items to be defined before or after where the item is referred to in the module or block. |
| |
| See [item scopes] for information on the scoping rules of items. |
| |
| [_ConstantItem_]: items/constant-items.md |
| [_Enumeration_]: items/enumerations.md |
| [_ExternBlock_]: items/external-blocks.md |
| [_ExternCrate_]: items/extern-crates.md |
| [_Function_]: items/functions.md |
| [_Implementation_]: items/implementations.md |
| [_MacroInvocationSemi_]: macros.md#macro-invocation |
| [_MacroRulesDefinition_]: macros-by-example.md |
| [_Module_]: items/modules.md |
| [_OuterAttribute_]: attributes.md |
| [_StaticItem_]: items/static-items.md |
| [_Struct_]: items/structs.md |
| [_Trait_]: items/traits.md |
| [_TypeAlias_]: items/type-aliases.md |
| [_Union_]: items/unions.md |
| [_UseDeclaration_]: items/use-declarations.md |
| [_Visibility_]: visibility-and-privacy.md |
| [`extern crate` declarations]: items/extern-crates.md |
| [`extern` blocks]: items/external-blocks.md |
| [`macro_rules`]: macros-by-example.md |
| [`use` declarations]: items/use-declarations.md |
| [associated items]: items/associated-items.md |
| [block expression]: expressions/block-expr.md |
| [constant items]: items/constant-items.md |
| [enumeration definitions]: items/enumerations.md |
| [function definitions]: items/functions.md |
| [implementations]: items/implementations.md |
| [item scopes]: names/scopes.md#item-scopes |
| [modules]: items/modules.md |
| [name resolution]: names/name-resolution.md |
| [paths]: paths.md |
| [root of the crate]: crates-and-source-files.md |
| [statement]: statements.md |
| [static items]: items/static-items.md |
| [struct definitions]: items/structs.md |
| [trait definitions]: items/traits.md |
| [traits]: items/traits.md |
| [type definitions]: items/type-aliases.md |
| [union definitions]: items/unions.md |