|
| 1 | +% Syntax Index |
| 2 | + |
| 3 | +## Keywords |
| 4 | + |
| 5 | +* `as`: primitive casting. See [Casting Between Types (`as`)]. |
| 6 | +* `break`: break out of loop. See [Loops (Ending Iteration Early)]. |
| 7 | +* `const`: constant items. See [`const` and `static`]. |
| 8 | +* `continue`: continue to next loop iteration. See [Loops (Ending Iteration Early)]. |
| 9 | +* `crate`: external crate linkage. See [Crates and Modules (Importing External Crates)]. |
| 10 | +* `else`: fallback for `if` and `if let` constructs. See [`if`], [`if let`]. |
| 11 | +* `enum`: defining enumeration. See [Enums]. |
| 12 | +* `extern`: external crate, function, and variable linkage. See [Crates and Modules (Importing External Crates)], [Foreign Function Interface]. |
| 13 | +* `false`: boolean false literal. See [Primitive Types (Booleans)]. |
| 14 | +* `fn`: function definition and function pointer types. See [Functions]. |
| 15 | +* `for`: iterator loop, part of trait `impl` syntax, and higher-ranked lifetime syntax. See [Loops (`for`)], [Method Syntax]. |
| 16 | +* `if`: conditional branching. See [`if`], [`if let`]. |
| 17 | +* `impl`: inherent and trait implementation blocks. See [Method Syntax]. |
| 18 | +* `in`: part of `for` loop syntax. See [Loops (`for`)]. |
| 19 | +* `let`: variable binding. See [Variable Bindings]. |
| 20 | +* `loop`: unconditional, infinite loop. See [Loops (`loop`)]. |
| 21 | +* `match`: pattern matching. See [Match]. |
| 22 | +* `mod`: module declaration. See [Crates and Modules (Defining Modules)]. |
| 23 | +* `move`: part of closure syntax. See [Closures (`move` closures)]. |
| 24 | +* `mut`: denotes mutability in pointer types and pattern bindings. See [Mutability]. |
| 25 | +* `pub`: denotes public visibility in `struct` fields, `impl` blocks, and modules. See [Crates and Modules (Exporting a Public Interface)]. |
| 26 | +* `ref`: by-reference binding. See [Patterns (`ref` and `ref mut`)]. |
| 27 | +* `return`: return from function. See [Functions (Early Returns)]. |
| 28 | +* `Self`: implementer type alias. See [Traits]. |
| 29 | +* `self`: method subject. See [Method Syntax (Method Calls)]. |
| 30 | +* `static`: global variable. See [`const` and `static` (`static`)]. |
| 31 | +* `struct`: structure definition. See [Structs]. |
| 32 | +* `trait`: trait definition. See [Traits]. |
| 33 | +* `true`: boolean true literal. See [Primitive Types (Booleans)]. |
| 34 | +* `type`: type alias, and associated type definition. See [`type` Aliases], [Associated Types]. |
| 35 | +* `unsafe`: denotes unsafe code, functions, traits, and implementations. See [Unsafe]. |
| 36 | +* `use`: import symbols into scope. See [Crates and Modules (Importing Modules with `use`)]. |
| 37 | +* `where`: type constraint clauses. See [Traits (`where` clause)]. |
| 38 | +* `while`: conditional loop. See [Loops (`while`)]. |
| 39 | + |
| 40 | +## Operators and Symbols |
| 41 | + |
| 42 | +* `!` (`expr!(…)`, `expr!{…}`, `expr![…]`): denotes macro expansion. See [Macros]. |
| 43 | +* `!` (`!expr`): bitwise or logical complement. Overloadable (`Not`). |
| 44 | +* `%` (`expr % expr`): arithmetic remainder. Overloadable (`Rem`). |
| 45 | +* `%=` (`var %= expr`): arithmetic remainder & assignment. |
| 46 | +* `&` (`expr & expr`): bitwise and. Overloadable (`BitAnd`). |
| 47 | +* `&` (`&expr`): borrow. See [References and Borrowing]. |
| 48 | +* `&` (`&type`, `&mut type`, `&'a type`, `&'a mut type`): borrowed pointer type. See [References and Borrowing]. |
| 49 | +* `&=` (`var &= expr`): bitwise and & assignment. |
| 50 | +* `&&` (`expr && expr`): logical and. |
| 51 | +* `*` (`expr * expr`): arithmetic multiplication. Overloadable (`Mul`). |
| 52 | +* `*` (`*expr`): dereference. |
| 53 | +* `*` (`*const type`, `*mut type`): raw pointer. See [Raw Pointers]. |
| 54 | +* `*=` (`var *= expr`): arithmetic multiplication & assignment. |
| 55 | +* `+` (`expr + expr`): arithmetic addition. Overloadable (`Add`). |
| 56 | +* `+` (`trait + trait`, `'a + trait`): compound type constraint. See [Traits (Multiple Trait Bounds)]. |
| 57 | +* `+=` (`var += expr`): arithmetic addition & assignment. |
| 58 | +* `,`: argument and element separator. See [Attributes], [Functions], [Structs], [Generics], [Match], [Closures], [Crates and Modules (Importing Modules with `use`)]. |
| 59 | +* `-` (`expr - expr`): arithmetic subtraction. Overloadable (`Sub`). |
| 60 | +* `-` (`- expr`): arithmetic negation. Overloadable (`Neg`). |
| 61 | +* `-=` (`var -= expr`): arithmetic subtraction & assignment. |
| 62 | +* `->` (`fn(…) -> type`, `|…| -> type`): function and closure return type. See [Functions], [Closures]. |
| 63 | +* `.` (`expr.ident`): member access. See [Structs], [Method Syntax]. |
| 64 | +* `..` (`..`, `expr..`, `..expr`, `expr..expr`): right-exclusive range literal. |
| 65 | +* `..` (`..expr`): struct literal update syntax. See [Structs (Update syntax)]. |
| 66 | +* `..` (`variant(x, ..)`, `struct_type { x, .. }`): "and the rest" pattern binding. See [Patterns (Ignoring bindings)]. |
| 67 | +* `...` (`expr ... expr`): inclusive range pattern. See [Patterns (Ranges)]. |
| 68 | +* `/` (`expr / expr`): arithmetic division. Overloadable (`Div`). |
| 69 | +* `/=` (`var /= expr`): arithmetic division & assignment. |
| 70 | +* `:` (`pat: type`, `ident: type`): constraints. See [Variable Bindings], [Functions], [Structs], [Traits]. |
| 71 | +* `:` (`ident: expr`): struct field initialiser. See [Structs]. |
| 72 | +* `:` (`'a: loop {…}`): loop label. See [Loops (Loops Labels)]. |
| 73 | +* `;`: statement and item terminator. |
| 74 | +* `;` (`[…; len]`): part of fixed-size array syntax. See [Primitive Types (Arrays)]. |
| 75 | +* `<<` (`expr << expr`): left-shift. Overloadable (`Shl`). |
| 76 | +* `<<=` (`var <<= expr`): left-shift & assignment. |
| 77 | +* `<` (`expr < expr`): less-than comparison. Overloadable (`Cmp`, `PartialCmp`). |
| 78 | +* `<=` (`var <= expr`): less-than or equal-to comparison. Overloadable (`Cmp`, `PartialCmp`). |
| 79 | +* `=` (`var = expr`, `ident = type`): assignment/equivalence. See [Variable Bindings], [`type` Aliases], generic parameter defaults. |
| 80 | +* `==` (`var == expr`): comparison. Overloadable (`Eq`, `PartialEq`). |
| 81 | +* `=>` (`pat => expr`): part of match arm syntax. See [Match]. |
| 82 | +* `>` (`expr > expr`): greater-than comparison. Overloadable (`Cmp`, `PartialCmp`). |
| 83 | +* `>=` (`var >= expr`): greater-than or equal-to comparison. Overloadable (`Cmp`, `PartialCmp`). |
| 84 | +* `>>` (`expr >> expr`): right-shift. Overloadable (`Shr`). |
| 85 | +* `>>=` (`var >>= expr`): right-shift & assignment. |
| 86 | +* `@` (`ident @ pat`): pattern binding. See [Patterns (Bindings)]. |
| 87 | +* `^` (`expr ^ expr`): bitwise exclusive or. Overloadable (`BitXor`). |
| 88 | +* `^=` (`var ^= expr`): bitwise exclusive or & assignment. |
| 89 | +* `|` (`expr | expr`): bitwise or. Overloadable (`BitOr`). |
| 90 | +* `|` (`pat | pat`): pattern alternatives. See [Patterns (Multiple patterns)]. |
| 91 | +* `|=` (`var |= expr`): bitwise or & assignment. |
| 92 | +* `||` (`expr || expr`): logical or. |
| 93 | +* `_`: "ignored" pattern binding. See [Patterns (Ignoring bindings)]. |
| 94 | + |
| 95 | +## Other Syntax |
| 96 | + |
| 97 | +<!-- Various bits of standalone stuff. --> |
| 98 | + |
| 99 | +* `'ident`: named lifetime or loop label. See [Lifetimes], [Loops (Loops Labels)]. |
| 100 | +* `…u8`, `…i32`, `…f64`, `…usize`, …: numeric literal of specific type. |
| 101 | +* `"…"`: string literal. See [Strings]. |
| 102 | +* `r"…"`, `r#"…"#`, `r##"…"##`, …: raw string literal. |
| 103 | +* `b"…"`: byte string literal. |
| 104 | +* `rb"…"`, `rb#"…"#`, `rb##"…"##`, …: raw byte string literal. |
| 105 | +* `'…'`: character literal. See [Primitive Types (`char`)]. |
| 106 | +* `b'…'`: ASCII byte literal. |
| 107 | + |
| 108 | +<!-- Path-related syntax --> |
| 109 | + |
| 110 | +* `ident::ident`: path. See [Crates and Modules (Defining Modules)]. |
| 111 | +* `::path`: path relative to the crate root (*i.e.* an explicitly absolute path). See [Crates and Modules (Re-exporting with `pub use`)]. |
| 112 | +* `self::path`: path relative to the current module (*i.e.* an explicitly relative path). See [Crates and Modules (Re-exporting with `pub use`)]. |
| 113 | +* `super::path`: path relative to the parent of the current module. See [Crates and Modules (Re-exporting with `pub use`)]. |
| 114 | +* `type::ident`: associated constants, functions, and types. See [Associated Types]. |
| 115 | +* `<type>::…`: associated item for a type which cannot be directly named (*e.g.* `<&T>::…`, `<[T]>::…`, *etc.*). See [Associated Types]. |
| 116 | + |
| 117 | +<!-- Generics --> |
| 118 | + |
| 119 | +* `path<…>` (*e.g.* `Vec<u8>`): specifies parameters to generic type *in a type*. See [Generics]. |
| 120 | +* `path::<…>`, `method::<…>` (*e.g.* `"42".parse::<i32>()`): specifies parameters to generic type, function, or method *in an expression*. |
| 121 | +* `fn ident<…> …`: define generic function. See [Generics]. |
| 122 | +* `struct ident<…> …`: define generic structure. See [Generics]. |
| 123 | +* `enum ident<…> …`: define generic enumeration. See [Generics]. |
| 124 | +* `impl<…> …`: define generic implementation. |
| 125 | +* `for<…> type`: higher-ranked lifetime bounds. |
| 126 | +* `type<ident=type>` (*e.g.* `Iterator<Item=T>`): a generic type where one or more associated types have specific assignments. See [Associated Types]. |
| 127 | + |
| 128 | +<!-- Constraints --> |
| 129 | + |
| 130 | +* `T: U`: generic parameter `T` constrained to types that implement `U`. See [Traits]. |
| 131 | +* `T: 'a`: generic type `T` must outlive lifetime `'a`. |
| 132 | +* `'b: 'a`: generic lifetime `'b` must outlive lifetime `'a`. |
| 133 | +* `T: ?Sized`: allow generic type parameter to be a dynamically-sized type. See [Unsized Types (`?Sized`)]. |
| 134 | +* `'a + trait`, `trait + trait`: compound type constraint. See [Traits (Multiple Trait Bounds)]. |
| 135 | + |
| 136 | +<!-- Macros and attributes --> |
| 137 | + |
| 138 | +* `#[meta]`: outer attribute. See [Attributes]. |
| 139 | +* `#![meta]`: inner attribute. See [Attributes]. |
| 140 | +* `$ident`: macro substitution. See [Macros]. |
| 141 | +* `$ident:kind`: macro capture. See [Macros]. |
| 142 | +* `$(…)…`: macro repetition. See [Macros]. |
| 143 | + |
| 144 | +<!-- Comments --> |
| 145 | + |
| 146 | +* `//`: line comment. See [Comments]. |
| 147 | +* `//!`: inner line doc comment. See [Comments]. |
| 148 | +* `///`: outer line doc comment. See [Comments]. |
| 149 | +* `/*…*/`: block comment. See [Comments]. |
| 150 | +* `/*!…*/`: inner block doc comment. See [Comments]. |
| 151 | +* `/**…*/`: outer block doc comment. See [Comments]. |
| 152 | + |
| 153 | +<!-- Various things involving parens and tuples --> |
| 154 | + |
| 155 | +* `()`: empty tuple (*a.k.a.* unit), both literal and type. |
| 156 | +* `(expr)`: parenthesised expression. |
| 157 | +* `(expr,)`: single-element tuple expression. See [Primitive Types (Tuples)]. |
| 158 | +* `(type,)`: single-element tuple type. See [Primitive Types (Tuples)]. |
| 159 | +* `(expr, …)`: tuple expression. See [Primitive Types (Tuples)]. |
| 160 | +* `(type, …)`: tuple type. See [Primitive Types (Tuples)]. |
| 161 | +* `expr(expr, …)`: function call expression. Also used to initialise tuple `struct`s and tuple `enum` variants. See [Functions]. |
| 162 | +* `ident!(…)`, `ident!{…}`, `ident![…]`: macro invocation. See [Macros]. |
| 163 | +* `expr.0`, `expr.1`, …: tuple indexing. See [Primitive Types (Tuple Indexing)]. |
| 164 | + |
| 165 | +<!-- Bracey things --> |
| 166 | + |
| 167 | +* `{…}`: block expression. |
| 168 | +* `Type {…}`: `struct` literal. See [Structs]. |
| 169 | + |
| 170 | +<!-- Brackety things --> |
| 171 | + |
| 172 | +* `[…]`: array literal. See [Primitive Types (Arrays)]. |
| 173 | +* `[expr; len]`: array literal containing `len` copies of `expr`. See [Primitive Types (Arrays)]. |
| 174 | +* `[type; len]`: array type containing `len` instances of `type`. See [Primitive Types (Arrays)]. |
| 175 | + |
| 176 | +[`const` and `static` (`static`)]: const-and-static.html#static |
| 177 | +[`const` and `static`]: const-and-static.html |
| 178 | +[`if let`]: if-let.html |
| 179 | +[`if`]: if.html |
| 180 | +[`type` Aliases]: type-aliases.html |
| 181 | +[Associated Types]: associated-types.html |
| 182 | +[Attributes]: attributes.html |
| 183 | +[Casting Between Types (`as`)]: casting-between-types.html#as |
| 184 | +[Closures (`move` closures)]: closures.html#move-closures |
| 185 | +[Closures]: closures.html |
| 186 | +[Comments]: comments.html |
| 187 | +[Crates and Modules (Defining Modules)]: crates-and-modules.html#defining-modules |
| 188 | +[Crates and Modules (Exporting a Public Interface)]: crates-and-modules.html#exporting-a-public-interface |
| 189 | +[Crates and Modules (Importing External Crates)]: crates-and-modules.html#importing-external-crates |
| 190 | +[Crates and Modules (Importing Modules with `use`)]: crates-and-modules.html#importing-modules-with-use |
| 191 | +[Crates and Modules (Re-exporting with `pub use`)]: crates-and-modules.html#re-exporting-with-pub-use |
| 192 | +[Enums]: enums.html |
| 193 | +[Foreign Function Interface]: ffi.html |
| 194 | +[Functions (Early Returns)]: functions.html#early-returns |
| 195 | +[Functions]: functions.html |
| 196 | +[Generics]: generics.html |
| 197 | +[Lifetimes]: lifetimes.html |
| 198 | +[Loops (`for`)]: loops.html#for |
| 199 | +[Loops (`loop`)]: loops.html#loop |
| 200 | +[Loops (`while`)]: loops.html#while |
| 201 | +[Loops (Ending Iteration Early)]: loops.html#ending-iteration-early |
| 202 | +[Loops (Loops Labels)]: loops.html#loop-labels |
| 203 | +[Macros]: macros.html |
| 204 | +[Match]: match.html |
| 205 | +[Method Syntax (Method Calls)]: method-syntax.html#method-calls |
| 206 | +[Method Syntax]: method-syntax.html |
| 207 | +[Mutability]: mutability.html |
| 208 | +[Operators and Overloading]: operators-and-overloading.html |
| 209 | +[Patterns (`ref` and `ref mut`)]: patterns.html#ref-and-ref-mut |
| 210 | +[Patterns (Bindings)]: patterns.html#bindings |
| 211 | +[Patterns (Ignoring bindings)]: patterns.html#ignoring-bindings |
| 212 | +[Patterns (Multiple patterns)]: patterns.html#multiple-patterns |
| 213 | +[Patterns (Ranges)]: patterns.html#ranges |
| 214 | +[Primitive Types (`char`)]: primitive-types.html#char |
| 215 | +[Primitive Types (Arrays)]: primitive-types.html#arrays |
| 216 | +[Primitive Types (Booleans)]: primitive-types.html#booleans |
| 217 | +[Primitive Types (Tuple Indexing)]: primitive-types.html#tuple-indexing |
| 218 | +[Primitive Types (Tuples)]: primitive-types.html#tuples |
| 219 | +[Raw Pointers]: raw-pointers.html |
| 220 | +[References and Borrowing]: references-and-borrowing.html |
| 221 | +[Strings]: strings.html |
| 222 | +[Structs (Update syntax)]: structs.html#update-syntax |
| 223 | +[Structs]: structs.html |
| 224 | +[Traits (`where` clause)]: traits.html#where-clause |
| 225 | +[Traits (Multiple Trait Bounds)]: traits.html#multiple-trait-bounds |
| 226 | +[Traits]: traits.html |
| 227 | +[Unsafe]: unsafe.html |
| 228 | +[Unsized Types (`?Sized`)]: unsized-types.html#?sized |
| 229 | +[Variable Bindings]: variable-bindings.html |
0 commit comments