docs(style-guide): add rules for let-else statements
This commit is contained in:
parent
c18a5e8a5b
commit
10b9c1d3ca
@ -99,6 +99,84 @@ let Foo {
|
|||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### else blocks (let-else statements)
|
||||||
|
|
||||||
|
If a let statement contains an `else` component, also known as a let-else statement,
|
||||||
|
then the `else` component should be formatted according to the same rules as the `else` block
|
||||||
|
in [control flow expressions (i.e. if-else, and if-let-else expressions)](./expressions.md#control-flow-expressions).
|
||||||
|
Apply the same formatting rules to the components preceding
|
||||||
|
the `else` block (i.e. the `let pattern: Type = initializer_expr ...` portion)
|
||||||
|
as described [above](#let-statements)
|
||||||
|
|
||||||
|
Similarly to if-else expressions, if the initializer
|
||||||
|
expression is multi-lined, then the `else` keyword and opening brace of the block (i.e. `else {`)
|
||||||
|
should be put on the same line as the end of the initializer
|
||||||
|
expression with a preceding space if all the following are true:
|
||||||
|
|
||||||
|
* The initializer expression ends with one or more closing
|
||||||
|
parentheses, square brackets, and/or braces
|
||||||
|
* There is nothing else on that line
|
||||||
|
* That line is not indented beyond the indent of the first line containing the `let` keyword
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
let Some(x) = y.foo(
|
||||||
|
"abc",
|
||||||
|
fairly_long_identifier,
|
||||||
|
"def",
|
||||||
|
"123456",
|
||||||
|
"string",
|
||||||
|
"cheese",
|
||||||
|
) else {
|
||||||
|
bar()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Otherwise, the `else` keyword and opening brace should be placed on the next line after the end of the initializer expression, and should not be indented (the `else` keyword should be aligned with the `let` keyword).
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
let Some(x) = abcdef()
|
||||||
|
.foo(
|
||||||
|
"abc",
|
||||||
|
some_really_really_really_long_ident,
|
||||||
|
"ident",
|
||||||
|
"123456",
|
||||||
|
)
|
||||||
|
.bar()
|
||||||
|
.baz()
|
||||||
|
.qux("fffffffffffffffff")
|
||||||
|
else {
|
||||||
|
foo_bar()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Single line let-else statements
|
||||||
|
|
||||||
|
The entire let-else statement may be formatted on a single line if all the following are true:
|
||||||
|
|
||||||
|
* the entire statement is *short*
|
||||||
|
* the `else` block contains a single-line expression and no statements
|
||||||
|
* the `else` block contains no comments
|
||||||
|
* the let statement components preceding the `else` block can be formatted on a single line
|
||||||
|
|
||||||
|
```rust
|
||||||
|
let Some(1) = opt else { return };
|
||||||
|
|
||||||
|
let Some(1) = opt else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
let Some(1) = opt else {
|
||||||
|
// nope
|
||||||
|
return
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Formatters may allow users to configure the value of the threshold
|
||||||
|
used to determine whether a let-else statement is *short*.
|
||||||
|
|
||||||
### Macros in statement position
|
### Macros in statement position
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user