So I’m looking at the rust style guide, and something came off as weird to me. In whitespace, it says that a multiple line function definition is written as:
fn frobnicate(a: Bar, b: Bar, c: Bar, d: Bar) // Note that these definitions are lined up -> Bar { // with the previous lines ... } whereas multiple lines of variables (i.e. in structs) are written as:
struct Bar { short: f64, // Note that the type names are differently aligned really_long: f64, } because names can change. This seems like a disconnect; in one case, we have the function definition’s variables being aligned to the function name, and in the other, they are aligned to the correct indentation. I think we should change this to
fn frobnicate(a: Bar, b: Bar, c: Bar, d: Bar) -> Bar { ... } or
fn frobnicate(a: Bar, b: Bar, c: Bar, d: Bar) -> Bar { ... } which I think seems more consistent. It’s also nice for multiline impls, as in this commit to rust-by-example, where:
impl<T: Add<T, T>> Add<Vec2<T>, Vec2<T>> for Vec2<T> { fn add(...) { ... } } or
impl<T> Sub<Vec2<T>, Vec2<T>> for Vec2<T> where T: Sub<T, T> { ... } is used.
N.B. The reason I use two tabs to indent instead of one, is:
fn do_the_thing(a: A, b: B, c: C, d: D) { ... } You can’t really tell where the code starts and the args end.