Skip to content

Commit

Permalink
Merge pull request #340 from joshtriplett/edition-guide-rustfmt-singl…
Browse files Browse the repository at this point in the history
…e-line-where-clauses

2024: Add chapter on single-line `where` clauses
  • Loading branch information
traviscross authored Dec 4, 2024
2 parents 1286692 + 027da04 commit 7a957fa
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,6 @@
- [Rustfmt](rust-2024/rustfmt.md)
- [Rustfmt: Style edition](rust-2024/rustfmt-style-edition.md)
- [Rustfmt: Combine all delimited exprs as last argument](rust-2024/rustfmt-overflow-delimited-expr.md)
- [Rustfmt: Single-line `where` clauses](rust-2024/rustfmt-single-line-where-clauses.md)
- [Rustfmt: Raw identifier sorting](rust-2024/rustfmt-raw-identifier-sorting.md)
- [Rustfmt: Version sorting](rust-2024/rustfmt-version-sorting.md)
43 changes: 43 additions & 0 deletions src/rust-2024/rustfmt-single-line-where-clauses.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Rustfmt: Single-line where clauses

## Summary

When an associated type or method declaration has a single bound in the `where` clause, it can now sometimes be formatted on one line.

## Details

In general, the [Rust Style Guide](../../style-guide/index.html) states to wrap `where` clauses onto subsequent lines, with the keyword `where` on a line of its own and then the individual clauses indented on subsequent lines.

However, in the 2024 Edition, when writing an associated type declaration or a method declaration (with no body), a short `where` clause can appear on the same line.

This is particularly useful for generic associated types (GATs), which often need `Self: Sized` bounds.

In Rust 2021 and before, this would look like:

```rust
trait MyTrait {
fn new(&self) -> Self
where
Self: Sized;

type Item<'a>: Send
where
Self: 'a;
}
```

In the 2024 Edition, `rustfmt` now produces:

```rust
trait MyTrait {
fn new(&self) -> Self where Self: Sized;

type Item<'a>: Send where Self: 'a;
}
```

## Migration

The change can be applied automatically by running `cargo fmt` or `rustfmt` with the 2024 Edition. See the [Style edition] chapter for more information on migrating and how style editions work.

[Style edition]: rustfmt-style-edition.md

0 comments on commit 7a957fa

Please sign in to comment.