Auto merge of #114901 - compiler-errors:style-guide-wc, r=calebcartwright

Amend style guide section for formatting where clauses in type aliases

This PR has two parts:
1. Amend wording about breaking before or after the `=`, which is a style guide bugfix to align it with current rustfmt behavior.
2. Explain how to format trailing (#89122) where clauses, which are preferred in both GATs (#90076) and type aliases (#114662).

r? `@joshtriplett`
This commit is contained in:
bors 2023-09-27 19:17:30 +00:00
commit 7b4b1b08b6

View File

@ -367,26 +367,52 @@ where
## Type aliases ## Type aliases
Keep type aliases on one line when they fit. If necessary to break the line, do Keep type aliases on one line when they fit. If necessary to break the line, do
so after the `=`, and block-indent the right-hand side: so before the `=`, and block-indent the right-hand side:
```rust ```rust
pub type Foo = Bar<T>; pub type Foo = Bar<T>;
// If multi-line is required // If multi-line is required
type VeryLongType<T, U: SomeBound> = type VeryLongType<T, U: SomeBound>
AnEvenLongerType<T, U, Foo<T>>; = AnEvenLongerType<T, U, Foo<T>>;
``` ```
Where possible avoid `where` clauses and keep type constraints inline. Where When there is a trailing `where` clause after the type, and no `where` clause
that is not possible split the line before and after the `where` clause (and present before the type, break before the `=` and indent. Then break before the
split the `where` clause as normal), e.g., `where` keyword and format the clauses normally, e.g.,
```rust ```rust
// With only a trailing where clause
type VeryLongType<T, U> type VeryLongType<T, U>
= AnEvenLongerType<T, U, Foo<T>>
where
T: U::AnAssociatedType,
U: SomeBound;
```
When there is a `where` clause before the type, format it normally, and break
after the last clause. Do not indent before the `=` to leave it visually
distinct from the indented clauses that precede it. If there is additionally a
`where` clause after the type, break before the `where` keyword and format the
clauses normally.
```rust
// With only a preceding where clause.
type WithPrecedingWC<T, U>
where where
T: U::AnAssociatedType, T: U::AnAssociatedType,
U: SomeBound, U: SomeBound,
= AnEvenLongerType<T, U, Foo<T>>; = AnEvenLongerType<T, U, Foo<T>>;
// Or with both a preceding and trailing where clause.
type WithPrecedingWC<T, U>
where
T: U::AnAssociatedType,
U: SomeBound,
= AnEvenLongerType<T, U, Foo<T>>
where
T: U::AnAssociatedType2,
U: SomeBound2;
``` ```
## Associated types ## Associated types