diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-09-21 00:11:35 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-21 00:11:35 +0200 |
| commit | 47277ab547439cdb92795532fd3844e881461fe5 (patch) | |
| tree | b2b14605a2166db7381ea437b3a78e40321f93fb | |
| parent | ad36b5a622b0d6d6f0f3260049b2245ee1f27a07 (diff) | |
| parent | 42fa7df38cea93d1a1991b7aa085a7a57b2800fa (diff) | |
| download | rust-47277ab547439cdb92795532fd3844e881461fe5.tar.gz rust-47277ab547439cdb92795532fd3844e881461fe5.zip | |
Rollup merge of #114394 - joshtriplett:style-guide-as, r=calebcartwright
style-guide: Document formatting of `as` casts (mostly like a binary operator) `as` casts currently get formatted like a binary operator, except that the second line can stack several `as` casts rather than breaking them each onto their own line. Document this. As far as I can tell (cc `@calebcartwright` for verification), this is not a 2024 edition change, it just documents current behavior.
| -rw-r--r-- | src/doc/style-guide/src/expressions.md | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/doc/style-guide/src/expressions.md b/src/doc/style-guide/src/expressions.md index e9ef509e6a2..12037b5992e 100644 --- a/src/doc/style-guide/src/expressions.md +++ b/src/doc/style-guide/src/expressions.md @@ -328,6 +328,26 @@ foo_bar Prefer line-breaking at an assignment operator (either `=` or `+=`, etc.) rather than at other binary operators. +### Casts (`as`) + +Format `as` casts like a binary operator. In particular, always include spaces +around `as`, and if line-breaking, break before the `as` (never after) and +block-indent the subsequent line. Format the type on the right-hand side using +the rules for types. + +However, unlike with other binary operators, if chaining a series of `as` casts +that require line-breaking, and line-breaking before the first `as` suffices to +make the remainder fit on the next line, don't break before any subsequent +`as`; instead, leave the series of types all on the same line: + +```rust +let cstr = very_long_expression() + as *const str as *const [u8] as *const std::os::raw::c_char; +``` + +If the subsequent line still requires line-breaking, break and block-indent +before each `as` as with other binary operators. + ## Control flow Do not include extraneous parentheses for `if` and `while` expressions. @@ -426,14 +446,6 @@ assert_eq!( ); ``` -## Casts (`as`) - -Put spaces before and after `as`: - -```rust -let cstr = "Hi\0" as *const str as *const [u8] as *const std::os::raw::c_char; -``` - ## Chains of fields and method calls A chain is a sequence of field accesses, method calls, and/or uses of the try |
