]> git.lizzy.rs Git - rust.git/blob - src/doc/style-guide/src/types.md
Auto merge of #97870 - eggyal:inplace_fold_spec, r=wesleywiser
[rust.git] / src / doc / style-guide / src / types.md
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 ```