|  | 
| 1 | 1 | ## Types and Bounds | 
|  | 2 | + | 
|  | 3 | +### Single line formatting | 
|  | 4 | + | 
|  | 5 | +* `[T]` no spaces | 
|  | 6 | +* `[T; expr]`, e.g., `[u32; 42]`, `[Vec<Foo>; 10 * 2 + foo()]` (space after colon, no spaces around square brackets) | 
|  | 7 | +* `*const T`, `*mut T` (no space after `*`, space before type) | 
|  | 8 | +* `&'a T`, `&T`, `&'a mut T`, `&mut T` (no space after `&`, single spaces separating other words) | 
|  | 9 | +* `unsafe extern "C" fn<'a, 'b, 'c>(T, U, V) -> W` or `fn()` (single spaces around keyowrds and sigils, and after commas, no trailing commas, no spaces around brackets) | 
|  | 10 | +* `!` should be treated like any other type name, `Name` | 
|  | 11 | +* `(A, B, C, D)` (spaces after commas, no spaces around parens, no trailing comma unless it is a one-tuple) | 
|  | 12 | +* `<Baz<T> as SomeTrait>::Foo::Bar` or `Foo::Bar` or `::Foo::Bar` (no spaces around `::` or angle brackets, single spaces around `as`) | 
|  | 13 | +* `Foo::Bar<T, U, V>` (spaces after commas, no trailing comma, no spaces around angle brackets) | 
|  | 14 | +* `T + T + T` (single spaces between types, and `+`). | 
|  | 15 | +* `impl T + T + T` (single spaces between keyword, types, and `+`). | 
|  | 16 | + | 
|  | 17 | +Parentheses used in types should not be surrounded by whitespace, e.g., `(Foo)` | 
|  | 18 | + | 
|  | 19 | + | 
|  | 20 | +### Line breaks | 
|  | 21 | + | 
|  | 22 | +Avoid breaking lines in types where possible. Prefer breaking at outermost scope, e.g., prefer | 
|  | 23 | + | 
|  | 24 | +```rust | 
|  | 25 | +Foo< | 
|  | 26 | +    Bar, | 
|  | 27 | +    Baz<Type1, Type2>, | 
|  | 28 | +> | 
|  | 29 | +``` | 
|  | 30 | + | 
|  | 31 | +to | 
|  | 32 | + | 
|  | 33 | +```rust | 
|  | 34 | +Foo<Bar, Baz< | 
|  | 35 | +    Type1, | 
|  | 36 | +    Type2, | 
|  | 37 | +>> | 
|  | 38 | +``` | 
|  | 39 | + | 
|  | 40 | +`[T; expr]` may be broken after the `;` if necessary. | 
|  | 41 | + | 
|  | 42 | +Function types may be broken following the rules for function declarations. | 
|  | 43 | + | 
|  | 44 | +Generic types may be broken following the rules for generics. | 
|  | 45 | + | 
|  | 46 | +Types with `+` may be broken after any `+` using block indent and breaking before the `+`. When breaking such a type, all `+`s should be line broken, e.g., | 
|  | 47 | + | 
|  | 48 | +```rust | 
|  | 49 | +impl Clone | 
|  | 50 | +    + Copy | 
|  | 51 | +    + Debug | 
|  | 52 | + | 
|  | 53 | +Box< | 
|  | 54 | +    Clone | 
|  | 55 | +    + Copy | 
|  | 56 | +    + Debug | 
|  | 57 | +> | 
|  | 58 | +``` | 
0 commit comments