Skip to content

Commit 7dcc4d7

Browse files
committed
Auto merge of #28926 - DanielKeep:syntax-index, r=steveklabnik
The intent with this chapter is to have a central place where users can go to find out what a random bit of syntax means, be it a keyword, symbol, or some unusual bit of composite syntax (like `for <...>`). This should be useful both for new users (who may not know what to call this weird `'blah` thing), and for experienced users (who may just wish to link someone to the appropriate section on `Trait + Trait` bounds). Where possible, entries have been linked to an appropriate section of the book which explains the syntax. This was not possible in all cases. If an entry is missing links, that's because I was unable to *find* anything appropriate to link to. This commit should include all stable keywords, operators and symbols, as well as a selection of potentially confusing or unusual syntax.
2 parents e3376d8 + 2b59834 commit 7dcc4d7

File tree

2 files changed

+230
-0
lines changed

2 files changed

+230
-0
lines changed

src/doc/trpl/SUMMARY.md

+1
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,5 @@
7070
* [Associated Constants](associated-constants.md)
7171
* [Custom Allocators](custom-allocators.md)
7272
* [Glossary](glossary.md)
73+
* [Syntax Index](syntax-index.md)
7374
* [Bibliography](bibliography.md)

src/doc/trpl/syntax-index.md

+229
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
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

Comments
 (0)