blob: b07b186740af2ac8eec6da28ff319b7a635a58bb [file] [log] [blame] [view]
# Syntax index
This appendix provides an index of tokens and common forms with links to where those elements are defined.
## Keywords
| Keyword | Use |
|---------------|-----|
| `_` | [wildcard pattern], [inferred const], [inferred type], [placeholder lifetime], [constant items], [extern crate], [use declarations], [destructuring assignment] |
| `abstract` | [reserved keyword] |
| `as` | [extern crate][items.extern-crate.as], [use declarations][items.use.forms.as], [type cast expressions], [qualified paths] |
| `async` | [async functions], [async blocks], [async closures] |
| `await` | [await expressions] |
| `become` | [reserved keyword] |
| `box` | [reserved keyword] |
| `break` | [break expressions] |
| `const` | [const functions], [const items], [const generics], [const blocks], [raw borrow operator], [raw pointer type], [const assembly operands] |
| `continue` | [continue expressions] |
| `crate` | [extern crate], [visibility], [paths] |
| `do` | [reserved keyword] |
| `dyn` | [trait objects] |
| `else` | [let statements], [if expressions] |
| `enum` | [enumerations] |
| `extern` | [extern crate], [extern function qualifier], [external blocks], [extern function pointer types] |
| `false` | [boolean type], [boolean expressions], [configuration predicates] |
| `final` | [reserved keyword] |
| `fn` | [functions], [function pointer types] |
| `for` | [trait implementations], [iterator loops], [higher-ranked trait bounds] |
| `gen` | [reserved keyword] |
| `if` | [if expressions], [match guards] |
| `impl` | [inherent impls], [trait impls], [impl trait types], [anonymous type parameters] |
| `in` | [visibility], [iterator loops], [assembly operands] |
| `let` | [let statements], [`if let` patterns] |
| `loop` | [infinite loops] |
| `macro_rules` | [macros by example] |
| `macro` | [reserved keyword] |
| `match` | [match expressions] |
| `mod` | [modules] |
| `move` | [closure expressions], [async blocks] |
| `mut` | [borrow expressions], [identifier patterns], [reference patterns], [struct patterns], [reference types], [raw pointer types], [self parameters], [static items] |
| `override` | [reserved keyword] |
| `priv` | [reserved keyword] |
| `pub` | [visibility] |
| `raw` | [borrow expressions], [raw assembly] |
| `ref` | [identifier patterns], [struct patterns] |
| `return` | [return expressions] |
| `safe` | [external block functions], [external block statics] |
| `self` | [extern crate][items.extern-crate.self], [self parameters], [visibility], [`self` paths] |
| `Self` | [`Self` type paths], [use bounds] |
| `static` | [static items], [`'static` lifetimes] |
| `struct` | [structs] |
| `super` | [super paths], [visibility] |
| `trait` | [trait items] |
| `true` | [boolean type], [boolean expressions], [configuration predicates] |
| `try` | [reserved keyword] |
| `type` | [type aliases] |
| `typeof` | [reserved keyword] |
| `union` | [union items] |
| `unsafe` | [unsafe blocks], [unsafe attributes], [unsafe modules], [unsafe functions], [unsafe external blocks], [unsafe external functions], [unsafe external statics], [unsafe traits], [unsafe trait implementations] |
| `unsized` | [reserved keyword] |
| `use` | [use items], [use bounds] |
| `virtual` | [reserved keyword] |
| `where` | [where clauses] |
| `while` | [predicate loops] |
| `yield` | [reserved keyword] |
## Operators and punctuation
| Symbol | Name | Use |
|--------|-------------|-----|
| `+` | Plus | [addition][arith], [trait bounds], [macro Kleene matcher] |
| `-` | Minus | [subtraction][arith], [negation] |
| `*` | Star | [multiplication][arith], [dereference], [raw pointers], [macro Kleene matcher], [glob imports] |
| `/` | Slash | [division][arith] |
| `%` | Percent | [remainder][arith] |
| `^` | Caret | [bitwise and logical XOR][arith] |
| `!` | Not | [bitwise and logical NOT][negation], [macro calls], [inner attributes][attributes], [never type], [negative impls] |
| `&` | And | [bitwise and logical AND][arith], [borrow], [references], [reference patterns] |
| `\|` | Or | [bitwise and logical OR][arith], [closures], [or patterns], [if let], [while let] |
| `&&` | AndAnd | [lazy AND][lazy-bool], [borrow], [references], [reference patterns] |
| `\|\|` | OrOr | [lazy OR][lazy-bool], [closures] |
| `<<` | Shl | [shift left][arith], [nested generics][generics] |
| `>>` | Shr | [shift right][arith], [nested generics][generics] |
| `+=` | PlusEq | [addition assignment][compound] |
| `-=` | MinusEq | [subtraction assignment][compound] |
| `*=` | StarEq | [multiplication assignment][compound] |
| `/=` | SlashEq | [division assignment][compound] |
| `%=` | PercentEq | [remainder assignment][compound] |
| `^=` | CaretEq | [bitwise XOR assignment][compound] |
| `&=` | AndEq | [bitwise AND assignment][compound] |
| `\|=` | OrEq | [bitwise OR assignment][compound] |
| `<<=` | ShlEq | [shift left assignment][compound] |
| `>>=` | ShrEq | [shift right assignment][compound], [nested generics][generics] |
| `=` | Eq | [assignment], [let statements], [attributes], various type definitions |
| `==` | EqEq | [equal][comparison] |
| `!=` | Ne | [not equal][comparison] |
| `>` | Gt | [greater than][comparison], [generics], [paths], [use bounds] |
| `<` | Lt | [less than][comparison], [generics], [paths], [use bounds] |
| `>=` | Ge | [greater than or equal to][comparison], [generics] |
| `<=` | Le | [less than or equal to][comparison] |
| `@` | At | [subpattern binding] |
| `.` | Dot | [field access][field], [tuple index] |
| `..` | DotDot | [range expressions][expr.range], [struct expressions], [rest pattern], [range patterns], [struct patterns] |
| `...` | DotDotDot | [variadic functions], [range patterns] |
| `..=` | DotDotEq | [inclusive range expressions][expr.range], [range patterns] |
| `,` | Comma | various separators |
| `;` | Semi | terminator for various items and statements, [array expressions], [array types] |
| `:` | Colon | various separators |
| `::` | PathSep | [path separator][paths] |
| `->` | RArrow | [functions], [closures], [function pointer type] |
| `=>` | FatArrow | [match arms][match], [macros] |
| `<-` | LArrow | The left arrow symbol has been unused since before Rust 1.0, but it is still treated as a single token. |
| `#` | Pound | [attributes], [raw string literals], [raw byte string literals], [raw C string literals] |
| `$` | Dollar | [macros] |
| `?` | Question | [try propagation expressions][question], [relaxed trait bounds], [macro Kleene matcher] |
| `~` | Tilde | The tilde operator has been unused since before Rust 1.0, but its token may still be used. |
## Comments
| Comment | Use |
|----------|-----|
| `//` | [line comment][comments] |
| `//!` | [inner line comment][comments] |
| `///` | [outer line doc comment][comments] |
| `/*…*/` | [block comment][comments] |
| `/*!…*/` | [inner block doc comment][comments] |
| `/**…*/` | [outer block doc comment][comments] |
## Other tokens
| Token | Use |
|--------------|-----|
| `ident` | [identifiers] |
| `r#ident` | [raw identifiers] |
| `'ident` | [lifetimes and loop labels] |
| `'r#ident` | [raw lifetimes and loop labels] |
| `…u8`, `…i32`, `…f64`, `…usize`, … | [number literals] |
| `"…"` | [string literals] |
| `r"…"`, `r#"…"#`, `r##"…"##`, … | [raw string literals] |
| `b"…"` | [byte string literals] |
| `br"…"`, `br#"…"#`, `br##"…"##`, … | [raw byte string literals] |
| `'…'` | [character literals] |
| `b'…'` | [byte literals] |
| `c"…"` | [C string literals] |
| `cr"…"`, `cr#"…"#`, `cr##"…"##`, … | [raw C string literals] |
## Macros
| Syntax | Use |
|--------------------------------------------|-----|
| `ident!(…)`<br>`ident! {…}`<br>`ident![…]` | [macro invocations] |
| `$ident` | [macro metavariable] |
| `$ident:kind` | [macro matcher fragment specifier] |
| `$(…)…` | [macro repetition] |
## Attributes
| Syntax | Use |
|------------|-----|
| `#[meta]` | [outer attribute] |
| `#![meta]` | [inner attribute] |
## Expressions
| Expression | Use |
|---------------------------|-----|
| `\|…\| expr`<br>`\|…\| -> Type { … }` | [closures] |
| `ident::…` | [paths] |
| `::crate_name::…` | [explicit crate paths] |
| `crate::…` | [crate-relative paths] |
| `self::…` | [module-relative paths] |
| `super::…` | [parent module paths] |
| `Type::…`<br>`<Type as Trait>::ident` | [associated items] |
| `<Type>::…` | [qualified paths] which can be used for types without names such as `<&T>::…`, `<[T]>::…`, etc. |
| `Trait::method(…)`<br>`Type::method(…)`<br>`<Type as Trait>::method(…)` | [disambiguated method calls] |
| `method::<…>(…)`<br>`path::<…>` | [generic arguments], aka turbofish |
| `()` | [unit] |
| `(expr)` | [parenthesized expressions] |
| `(expr,)` | [single-element tuple expressions] |
| `(expr, …)` | [tuple expressions] |
| `expr(expr, …)` | [call expressions] |
| `expr.0`, `expr.1`, … | [tuple indexing expressions] |
| `expr.ident` | [field access expressions] |
| `{…}` | [block expressions] |
| `Type {…}` | [struct expressions] |
| `Type(…)` | [tuple struct constructors] |
| `[…]` | [array expressions] |
| `[expr; len]` | [repeat array expressions] |
| `expr[..]`, `expr[a..]`, `expr[..b]`, `expr[a..b]`, `expr[a..=b]`, `expr[..=b]` | [array and slice indexing expressions] |
| `if expr {…} else {…}` | [if expressions] |
| `match expr { pattern => {…} }` | [match expressions] |
| `loop {…}` | [infinite loop expressions] |
| `while expr {…}` | [predicate loop expressions] |
| `for pattern in expr {…}` | [iterator loops] |
| `&expr`<br>`&mut expr` | [borrow expressions] |
| `&raw const expr`<br>`&raw mut expr` | [raw borrow expressions] |
| `*expr` | [dereference expressions] |
| `expr?` | [try propagation expressions] |
| `-expr` | [negation expressions] |
| `!expr` | [bitwise and logical NOT expressions] |
| `expr as Type` | [type cast expressions] |
## Items
[Items] are the components of a crate.
| Item | Use |
|-------------------------------|-----|
| `mod ident;`<br>`mod ident {…}` | [modules] |
| `use path;` | [use declarations] |
| `fn ident(…) {…}` | [functions] |
| `type Type = Type;` | [type aliases] |
| `struct ident {…}` | [structs] |
| `enum ident {…}` | [enumerations] |
| `union ident {…}` | [unions] |
| `trait ident {…}` | [traits] |
| `impl Type {…}`<br>`impl Type for Trait {…}` | [implementations] |
| `const ident = expr;` | [constant items] |
| `static ident = expr;` | [static items] |
| `extern "C" {…}` | [external blocks] |
| `fn ident<…>(…) …`<br>`struct ident<…> {…}`<br>`enum ident<…> {…}`<br>`impl<…> Type<…> {…}` | [generic definitions] |
## Type expressions
[Type expressions] are used to refer to types.
| Type | Use |
|---------------------------------------|-----|
| `bool`, `u8`, `f64`, `str`, … | [primitive types] |
| `for<…>` | [higher-ranked trait bounds] |
| `T: TraitA + TraitB` | [trait bounds] |
| `T: 'a + 'b` | [lifetime bounds] |
| `T: TraitA + 'a` | [trait and lifetime bounds] |
| `T: ?Sized` | [relaxed trait bounds] |
| `[Type; len]` | [array types] |
| `(Type, …)` | [tuple types] |
| `[Type]` | [slice types] |
| `(Type)` | [parenthesized types] |
| `impl Trait` | [impl trait types], [anonymous type parameters] |
| `dyn Trait` | [trait object types] |
| `ident`<br>`ident::…` | [type paths] (can refer to [structs], [enumerations], [unions], [type aliases], [traits], [generics], etc.) |
| `Type<…>`<br>`Trait<…>` | [generic arguments] (e.g. `Vec<u8>`) |
| `Trait<ident = Type>` | [associated type bindings] (e.g. `Iterator<Item = T>`) |
| `Trait<ident: …>` | [associated type bounds] (e.g. `Iterator<Item: Send>`) |
| `&Type`<br>`&mut Type` | [reference types] |
| `*mut Type`<br>`*const Type` | [raw pointer types] |
| `fn(…) -> Type` | [function pointer types] |
| `_` | [inferred type], [inferred const] |
| `'_` | [placeholder lifetime] |
| `!` | [never type] |
## Patterns
[Patterns] are used to match values.
| Pattern | Use |
|-----------------------------------|-----|
| `"foo"`, `'a'`, `123`, `2.4`, … | [literal patterns] |
| `ident` | [identifier patterns] |
| `_` | [wildcard pattern] |
| `..` | [rest pattern] |
| `a..`, `..b`, `a..b`, `a..=b`, `..=b` | [range patterns] |
| `&pattern`<br>`&mut pattern` | [reference patterns] |
| `path {…}` | [struct patterns] |
| `path(…)` | [tuple struct patterns] |
| `(pattern, …)` | [tuple patterns] |
| `(pattern)` | [grouped patterns] |
| `[pattern, …]` | [slice patterns] |
| `CONST`, `Enum::Variant`, … | [path patterns] |
[`'static` lifetimes]: bound
[`if let` patterns]: expr.if.let
[`self` paths]: paths.qualifiers.mod-self
[`Self` type paths]: paths.qualifiers.type-self
[anonymous type parameters]: type.impl-trait.param
[arith]: expr.arith-logic
[array and slice indexing expressions]: expr.array.index
[array expressions]: expr.array
[array types]: type.array
[assembly operands]: asm.operand-type.supported-operands.in
[assignment]: expr.assign
[associated items]: items.associated
[associated type bindings]: paths.expr
[associated type bounds]: paths.expr
[async blocks]: expr.block.async
[async closures]: expr.closure.async
[async functions]: items.fn.async
[await expressions]: expr.await
[bitwise and logical NOT expressions]: expr.negate
[block expressions]: expr.block
[boolean expressions]: expr.literal
[boolean type]: type.bool
[borrow expressions]: expr.operator.borrow
[borrow]: expr.operator.borrow
[break expressions]: expr.loop.break
[byte literals]: lex.token.byte
[byte string literals]: lex.token.str-byte
[C string literals]: lex.token.str-c
[call expressions]: expr.call
[character literals]: lex.token.literal.char
[closure expressions]: expr.closure
[closures]: expr.closure
[comparison]: expr.cmp
[compound]: expr.compound-assign
[configuration predicates]: cfg
[const assembly operands]: asm.operand-type.supported-operands.const
[const blocks]: expr.block.const
[const functions]: const-eval.const-fn
[const generics]: items.generics.const
[const items]: items.const
[constant items]: items.const
[continue expressions]: expr.loop.continue
[crate-relative paths]: paths.qualifiers.crate
[dereference expressions]: expr.deref
[dereference]: expr.deref
[destructuring assignment]: expr.placeholder
[disambiguated method calls]: expr.call.desugar
[enumerations]: items.enum
[explicit crate paths]: paths.qualifiers.global-root
[extern crate]: items.extern-crate
[extern function pointer types]: type.fn-pointer.qualifiers
[extern function qualifier]: items.fn.extern
[external block functions]: items.extern.fn
[external block statics]: items.extern.static
[external blocks]: items.extern
[field access expressions]: expr.field
[field]: expr.field
[function pointer type]: type.fn-pointer
[function pointer types]: type.fn-pointer
[functions]: items.fn
[generic arguments]: items.generics
[generic definitions]: items.generics
[generics]: items.generics
[glob imports]: items.use.glob
[grouped patterns]: patterns.paren
[higher-ranked trait bounds]: bound.higher-ranked
[identifier patterns]: patterns.ident
[identifiers]: ident
[if expressions]: expr.if
[if let]: expr.if.let
[impl trait types]: type.impl-trait.return
[implementations]: items.impl
[inferred const]: items.generics.const.inferred
[inferred type]: type.inferred
[infinite loop expressions]: expr.loop.infinite
[infinite loops]: expr.loop.infinite
[inherent impls]: items.impl.inherent
[inner attribute]: attributes.inner
[iterator loops]: expr.loop.for
[lazy-bool]: expr.bool-logic
[let statements]: statement.let
[lifetime bounds]: bound.lifetime
[lifetimes and loop labels]: lex.token.life
[literal patterns]: patterns.literal
[macro calls]: macro.invocation
[macro invocations]: macro.invocation
[macro Kleene matcher]: macro.decl.repetition
[macro matcher fragment specifier]: macro.decl.meta.specifier
[macro metavariable]: macro.decl.meta
[macro repetition]: macro.decl.repetition
[macros by example]: macro.decl
[macros]: macro.decl
[match expressions]: expr.match
[match guards]: expr.match.guard
[match]: expr.match
[module-relative paths]: paths.qualifiers.mod-self
[modules]: items.mod
[negation expressions]: expr.negate
[negation]: expr.negate
[negative impls]: items.impl
[never type]: type.never
[number literals]: lex.token.literal.num
[or patterns]: patterns.or
[outer attribute]: attributes.outer
[parent module paths]: paths.qualifiers.super
[parenthesized expressions]: expr.paren
[parenthesized types]: type.name.parenthesized
[path patterns]: patterns.path
[placeholder lifetime]: lifetime-elision.function.explicit-placeholder
[predicate loop expressions]: expr.loop.while
[predicate loops]: expr.loop.while
[primitive types]: type.kinds
[qualified paths]: paths.qualified
[question]: expr.try
[range patterns]: patterns.range
[raw assembly]: asm.options.supported-options.raw
[raw borrow expressions]: expr.borrow.raw
[raw borrow operator]: expr.borrow.raw
[raw byte string literals]: lex.token.str-byte-raw
[raw C string literals]: lex.token.str-c-raw
[raw identifiers]: ident.raw
[raw lifetimes and loop labels]: lex.token.life
[raw pointer type]: type.pointer.raw
[raw pointer types]: type.pointer.raw
[raw pointers]: type.pointer.raw
[raw string literals]: lex.token.literal.str-raw
[reference patterns]: patterns.ref
[reference types]: type.pointer.reference
[references]: type.pointer.reference
[relaxed trait bounds]: bound.sized
[repeat array expressions]: expr.array
[reserved keyword]: lex.keywords.reserved
[rest pattern]: patterns.rest
[return expressions]: expr.return
[self parameters]: items.fn.params.self-pat
[single-element tuple expressions]: expr.tuple
[slice patterns]: patterns.slice
[slice types]: type.slice
[static items]: items.static
[string literals]: lex.token.literal.str
[struct expressions]: expr.struct
[struct patterns]: patterns.struct
[structs]: items.struct
[subpattern binding]: patterns.ident.scrutinized
[super paths]: paths.qualifiers.super
[trait and lifetime bounds]: bound
[trait bounds]: bound
[trait implementations]: items.impl.trait
[trait impls]: items.impl.trait
[trait items]: items.traits
[trait object types]: type.trait-object
[trait objects]: type.trait-object
[traits]: items.traits
[try propagation expressions]: expr.try
[tuple expressions]: expr.tuple
[tuple index]: expr.tuple-index
[tuple indexing expressions]: expr.tuple-index
[tuple patterns]: patterns.tuple
[tuple struct constructors]: items.struct.tuple
[tuple struct patterns]: patterns.tuple-struct
[tuple types]: type.tuple
[type aliases]: items.type
[type cast expressions]: expr.as
[Type expressions]: type.name
[type paths]: type.name.path
[union items]: items.union
[unions]: items.union
[unit]: type.tuple.unit
[unsafe attributes]: attributes.safety
[unsafe blocks]: expr.block.unsafe
[unsafe external blocks]: unsafe.extern
[unsafe external functions]: items.extern.fn.safety
[unsafe external statics]: items.extern.static.safety
[unsafe functions]: unsafe.fn
[unsafe modules]: items.mod.unsafe
[unsafe trait implementations]: items.impl.trait.safety
[unsafe traits]: items.traits.safety
[use bounds]: bound.use
[use declarations]: items.use
[use items]: items.use
[variadic functions]: items.extern.variadic
[visibility]: vis
[where clauses]: items.generics.where
[while let]: expr.loop.while.let
[wildcard pattern]: patterns.wildcard