]> git.lizzy.rs Git - rust.git/blob - src/doc/book/syntax-index.md
Auto merge of #30145 - petrochenkov:hyg, r=nrc
[rust.git] / src / doc / book / syntax-index.md
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 and constant raw pointers.  See [`const` and `static`], [Raw Pointers].
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`: implementor 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 * `!` (`ident!(…)`, `ident!{…}`, `ident![…]`): 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 * `-> !` (`fn(…) -> !`, `|…| -> !`): diverging function or closure. See [Diverging Functions].
64 * `.` (`expr.ident`): member access.  See [Structs], [Method Syntax].
65 * `..` (`..`, `expr..`, `..expr`, `expr..expr`): right-exclusive range literal.
66 * `..` (`..expr`): struct literal update syntax.  See [Structs (Update syntax)].
67 * `..` (`variant(x, ..)`, `struct_type { x, .. }`): "and the rest" pattern binding.  See [Patterns (Ignoring bindings)].
68 * `...` (`expr ... expr`): inclusive range pattern.  See [Patterns (Ranges)].
69 * `/` (`expr / expr`): arithmetic division.  Overloadable (`Div`).
70 * `/=` (`var /= expr`): arithmetic division & assignment.
71 * `:` (`pat: type`, `ident: type`): constraints.  See [Variable Bindings], [Functions], [Structs], [Traits].
72 * `:` (`ident: expr`): struct field initializer.  See [Structs].
73 * `:` (`'a: loop {…}`): loop label.  See [Loops (Loops Labels)].
74 * `;`: statement and item terminator.
75 * `;` (`[…; len]`): part of fixed-size array syntax.  See [Primitive Types (Arrays)].
76 * `<<` (`expr << expr`): left-shift.  Overloadable (`Shl`).
77 * `<<=` (`var <<= expr`): left-shift & assignment.
78 * `<` (`expr < expr`): less-than comparison.  Overloadable (`Cmp`, `PartialCmp`).
79 * `<=` (`var <= expr`): less-than or equal-to comparison.  Overloadable (`Cmp`, `PartialCmp`).
80 * `=` (`var = expr`, `ident = type`): assignment/equivalence.  See [Variable Bindings], [`type` Aliases], generic parameter defaults.
81 * `==` (`var == expr`): comparison.  Overloadable (`Eq`, `PartialEq`).
82 * `=>` (`pat => expr`): part of match arm syntax.  See [Match].
83 * `>` (`expr > expr`): greater-than comparison.  Overloadable (`Cmp`, `PartialCmp`).
84 * `>=` (`var >= expr`): greater-than or equal-to comparison.  Overloadable (`Cmp`, `PartialCmp`).
85 * `>>` (`expr >> expr`): right-shift.  Overloadable (`Shr`).
86 * `>>=` (`var >>= expr`): right-shift & assignment.
87 * `@` (`ident @ pat`): pattern binding.  See [Patterns (Bindings)].
88 * `^` (`expr ^ expr`): bitwise exclusive or.  Overloadable (`BitXor`).
89 * `^=` (`var ^= expr`): bitwise exclusive or & assignment.
90 * `|` (`expr | expr`): bitwise or.  Overloadable (`BitOr`).
91 * `|` (`pat | pat`): pattern alternatives.  See [Patterns (Multiple patterns)].
92 * `|` (`|…| expr`): closures.  See [Closures].
93 * `|=` (`var |= expr`): bitwise or & assignment.
94 * `||` (`expr || expr`): logical or.
95 * `_`: "ignored" pattern binding.  See [Patterns (Ignoring bindings)].
96
97 ## Other Syntax
98
99 <!-- Various bits of standalone stuff. -->
100
101 * `'ident`: named lifetime or loop label.  See [Lifetimes], [Loops (Loops Labels)].
102 * `…u8`, `…i32`, `…f64`, `…usize`, …: numeric literal of specific type.
103 * `"…"`: string literal.  See [Strings].
104 * `r"…"`, `r#"…"#`, `r##"…"##`, …: raw string literal, escape characters are not processed. See [Reference (Raw String Literals)].
105 * `b"…"`: byte string literal, constructs a `[u8]` instead of a string. See [Reference (Byte String Literals)].
106 * `br"…"`, `br#"…"#`, `br##"…"##`, …: raw byte string literal, combination of raw and byte string literal. See [Reference (Raw Byte String Literals)].
107 * `'…'`: character literal.  See [Primitive Types (`char`)].
108 * `b'…'`: ASCII byte literal.
109 * `|…| expr`: closure.  See [Closures].
110
111 <!-- Path-related syntax -->
112
113 * `ident::ident`: path.  See [Crates and Modules (Defining Modules)].
114 * `::path`: path relative to the crate root (*i.e.* an explicitly absolute path).  See [Crates and Modules (Re-exporting with `pub use`)].
115 * `self::path`: path relative to the current module (*i.e.* an explicitly relative path).  See [Crates and Modules (Re-exporting with `pub use`)].
116 * `super::path`: path relative to the parent of the current module.  See [Crates and Modules (Re-exporting with `pub use`)].
117 * `type::ident`: associated constants, functions, and types.  See [Associated Types].
118 * `<type>::…`: associated item for a type which cannot be directly named (*e.g.* `<&T>::…`, `<[T]>::…`, *etc.*).  See [Associated Types].
119
120 <!-- Generics -->
121
122 * `path<…>` (*e.g.* `Vec<u8>`): specifies parameters to generic type *in a type*.  See [Generics].
123 * `path::<…>`, `method::<…>` (*e.g.* `"42".parse::<i32>()`): specifies parameters to generic type, function, or method *in an expression*.
124 * `fn ident<…> …`: define generic function.  See [Generics].
125 * `struct ident<…> …`: define generic structure.  See [Generics].
126 * `enum ident<…> …`: define generic enumeration.  See [Generics].
127 * `impl<…> …`: define generic implementation.
128 * `for<…> type`: higher-ranked lifetime bounds.
129 * `type<ident=type>` (*e.g.* `Iterator<Item=T>`): a generic type where one or more associated types have specific assignments.  See [Associated Types].
130
131 <!-- Constraints -->
132
133 * `T: U`: generic parameter `T` constrained to types that implement `U`.  See [Traits].
134 * `T: 'a`: generic type `T` must outlive lifetime `'a`.
135 * `'b: 'a`: generic lifetime `'b` must outlive lifetime `'a`.
136 * `T: ?Sized`: allow generic type parameter to be a dynamically-sized type.  See [Unsized Types (`?Sized`)].
137 * `'a + trait`, `trait + trait`: compound type constraint.  See [Traits (Multiple Trait Bounds)].
138
139 <!-- Macros and attributes -->
140
141 * `#[meta]`: outer attribute.  See [Attributes].
142 * `#![meta]`: inner attribute.  See [Attributes].
143 * `$ident`: macro substitution.  See [Macros].
144 * `$ident:kind`: macro capture.  See [Macros].
145 * `$(…)…`: macro repetition.  See [Macros].
146
147 <!-- Comments -->
148
149 * `//`: line comment.  See [Comments].
150 * `//!`: inner line doc comment.  See [Comments].
151 * `///`: outer line doc comment.  See [Comments].
152 * `/*…*/`: block comment.  See [Comments].
153 * `/*!…*/`: inner block doc comment.  See [Comments].
154 * `/**…*/`: outer block doc comment.  See [Comments].
155
156 <!-- Various things involving parens and tuples -->
157
158 * `()`: empty tuple (*a.k.a.* unit), both literal and type.
159 * `(expr)`: parenthesized expression.
160 * `(expr,)`: single-element tuple expression.  See [Primitive Types (Tuples)].
161 * `(type,)`: single-element tuple type.  See [Primitive Types (Tuples)].
162 * `(expr, …)`: tuple expression.  See [Primitive Types (Tuples)].
163 * `(type, …)`: tuple type.  See [Primitive Types (Tuples)].
164 * `expr(expr, …)`: function call expression.  Also used to initialize tuple `struct`s and tuple `enum` variants.  See [Functions].
165 * `ident!(…)`, `ident!{…}`, `ident![…]`: macro invocation.  See [Macros].
166 * `expr.0`, `expr.1`, …: tuple indexing.  See [Primitive Types (Tuple Indexing)].
167
168 <!-- Bracey things -->
169
170 * `{…}`: block expression.
171 * `Type {…}`: `struct` literal.  See [Structs].
172
173 <!-- Brackety things -->
174
175 * `[…]`: array literal.  See [Primitive Types (Arrays)].
176 * `[expr; len]`: array literal containing `len` copies of `expr`.  See [Primitive Types (Arrays)].
177 * `[type; len]`: array type containing `len` instances of `type`.  See [Primitive Types (Arrays)].
178 * `expr[expr]`: collection indexing.  Overloadable (`Index`, `IndexMut`).
179 * `expr[..]`, `expr[a..]`, `expr[..b]`, `expr[a..b]`: collection indexing pretending to be collection slicing, using `Range`, `RangeFrom`, `RangeTo`, `RangeFull` as the "index".
180
181 [`const` and `static` (`static`)]: const-and-static.html#static
182 [`const` and `static`]: const-and-static.html
183 [`if let`]: if-let.html
184 [`if`]: if.html
185 [`type` Aliases]: type-aliases.html
186 [Associated Types]: associated-types.html
187 [Attributes]: attributes.html
188 [Casting Between Types (`as`)]: casting-between-types.html#as
189 [Closures (`move` closures)]: closures.html#move-closures
190 [Closures]: closures.html
191 [Comments]: comments.html
192 [Crates and Modules (Defining Modules)]: crates-and-modules.html#defining-modules
193 [Crates and Modules (Exporting a Public Interface)]: crates-and-modules.html#exporting-a-public-interface
194 [Crates and Modules (Importing External Crates)]: crates-and-modules.html#importing-external-crates
195 [Crates and Modules (Importing Modules with `use`)]: crates-and-modules.html#importing-modules-with-use
196 [Crates and Modules (Re-exporting with `pub use`)]: crates-and-modules.html#re-exporting-with-pub-use
197 [Diverging Functions]: functions.html#diverging-functions
198 [Enums]: enums.html
199 [Foreign Function Interface]: ffi.html
200 [Functions (Early Returns)]: functions.html#early-returns
201 [Functions]: functions.html
202 [Generics]: generics.html
203 [Lifetimes]: lifetimes.html
204 [Loops (`for`)]: loops.html#for
205 [Loops (`loop`)]: loops.html#loop
206 [Loops (`while`)]: loops.html#while
207 [Loops (Ending Iteration Early)]: loops.html#ending-iteration-early
208 [Loops (Loops Labels)]: loops.html#loop-labels
209 [Macros]: macros.html
210 [Match]: match.html
211 [Method Syntax (Method Calls)]: method-syntax.html#method-calls
212 [Method Syntax]: method-syntax.html
213 [Mutability]: mutability.html
214 [Operators and Overloading]: operators-and-overloading.html
215 [Patterns (`ref` and `ref mut`)]: patterns.html#ref-and-ref-mut
216 [Patterns (Bindings)]: patterns.html#bindings
217 [Patterns (Ignoring bindings)]: patterns.html#ignoring-bindings
218 [Patterns (Multiple patterns)]: patterns.html#multiple-patterns
219 [Patterns (Ranges)]: patterns.html#ranges
220 [Primitive Types (`char`)]: primitive-types.html#char
221 [Primitive Types (Arrays)]: primitive-types.html#arrays
222 [Primitive Types (Booleans)]: primitive-types.html#booleans
223 [Primitive Types (Tuple Indexing)]: primitive-types.html#tuple-indexing
224 [Primitive Types (Tuples)]: primitive-types.html#tuples
225 [Raw Pointers]: raw-pointers.html
226 [Reference (Byte String Literals)]: ../reference.html#byte-string-literals
227 [Reference (Raw Byte String Literals)]: ../reference.html#raw-byte-string-literals
228 [Reference (Raw String Literals)]: ../reference.html#raw-string-literals
229 [References and Borrowing]: references-and-borrowing.html
230 [Strings]: strings.html
231 [Structs (Update syntax)]: structs.html#update-syntax
232 [Structs]: structs.html
233 [Traits (`where` clause)]: traits.html#where-clause
234 [Traits (Multiple Trait Bounds)]: traits.html#multiple-trait-bounds
235 [Traits]: traits.html
236 [Unsafe]: unsafe.html
237 [Unsized Types (`?Sized`)]: unsized-types.html#?sized
238 [Variable Bindings]: variable-bindings.html