diff options
| author | Michael Goulet <michael@errs.io> | 2024-05-14 09:55:27 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-14 09:55:27 -0400 |
| commit | 36287830a22897fc05f33f615291df7efe8cad20 (patch) | |
| tree | 6e4fd12468eee2b1236a87ff0beceb9e4c274ec7 | |
| parent | 31026b7fe3e510a646eddeda838d1f0859f892e7 (diff) | |
| parent | e098eb14ae9576593b38d4179c981fb7af7bee89 (diff) | |
| download | rust-36287830a22897fc05f33f615291df7efe8cad20.tar.gz rust-36287830a22897fc05f33f615291df7efe8cad20.zip | |
Rollup merge of #119838 - joshtriplett:style-guide-binop-indent, r=compiler-errors
style-guide: When breaking binops handle multi-line first operand better Use the indentation of the *last* line of the first operand, not the first. Fixes https://github.com/rust-lang/style-team/issues/189
| -rw-r--r-- | src/doc/style-guide/src/editions.md | 2 | ||||
| -rw-r--r-- | src/doc/style-guide/src/expressions.md | 31 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/doc/style-guide/src/editions.md b/src/doc/style-guide/src/editions.md index 9d593f80810..74e873e35ff 100644 --- a/src/doc/style-guide/src/editions.md +++ b/src/doc/style-guide/src/editions.md @@ -40,6 +40,8 @@ include: of a delimited expression, delimited expressions are generally combinable, regardless of the number of members. Previously only applied with exactly one member (except for closures with explicit blocks). +- When line-breaking a binary operator, if the first operand spans multiple + lines, use the base indentation of the last line. - Miscellaneous `rustfmt` bugfixes. - Use version-sort (sort `x8`, `x16`, `x32`, `x64`, `x128` in that order). - Change "ASCIIbetical" sort to Unicode-aware "non-lowercase before lowercase". diff --git a/src/doc/style-guide/src/expressions.md b/src/doc/style-guide/src/expressions.md index 171a24cd89d..3bb0ee6d5ff 100644 --- a/src/doc/style-guide/src/expressions.md +++ b/src/doc/style-guide/src/expressions.md @@ -328,6 +328,37 @@ foo_bar Prefer line-breaking at an assignment operator (either `=` or `+=`, etc.) rather than at other binary operators. +If line-breaking at a binary operator (including assignment operators) where the +first operand spans multiple lines, use the base indentation of the *last* +line of the first operand, and indent relative to that: + +```rust +impl SomeType { + fn method(&mut self) { + self.array[array_index as usize] + .as_mut() + .expect("thing must exist") + .extra_info = + long_long_long_long_long_long_long_long_long_long_long_long_long_long_long; + + self.array[array_index as usize] + .as_mut() + .expect("thing must exist") + .extra_info + + long_long_long_long_long_long_long_long_long_long_long_long_long_long_long; + + self.array[array_index as usize] + .as_mut() + .expect("thing must exist") + .extra_info = Some(ExtraInfo { + parent, + count: count as u16, + children: children.into_boxed_slice(), + }); + } +} +``` + ### Casts (`as`) Format `as` casts like a binary operator. In particular, always include spaces |
