[T]
no spaces[T; expr]
, e.g., [u32; 42]
, [Vec<Foo>; 10 * 2 + foo()]
(space after colon, no spaces around square brackets)*const T
, *mut T
(no space after *
, space before type)&'a T
, &T
, &'a mut T
, &mut T
(no space after &
, single spaces separating other words)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)!
should be treated like any other type name, Name
(A, B, C, D)
(spaces after commas, no spaces around parens, no trailing comma unless it is a one-tuple)<Baz<T> as SomeTrait>::Foo::Bar
or Foo::Bar
or ::Foo::Bar
(no spaces around ::
or angle brackets, single spaces around as
)Foo::Bar<T, U, V>
(spaces after commas, no trailing comma, no spaces around angle brackets)T + T + T
(single spaces between types, and +
).impl T + T + T
(single spaces between keyword, types, and +
).Parentheses used in types should not be surrounded by whitespace, e.g., (Foo)
Avoid breaking lines in types where possible. Prefer breaking at outermost scope, e.g., prefer
Foo< Bar, Baz<Type1, Type2>, >
to
Foo<Bar, Baz< Type1, Type2, >>
[T; expr]
may be broken after the ;
if necessary.
Function types may be broken following the rules for function declarations.
Generic types may be broken following the rules for generics.
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.,
impl Clone + Copy + Debug Box< Clone + Copy + Debug >