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 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:

#![allow(unused)]
fn main() {
trait MyTrait {
    fn new(&self) -> Self
    where
        Self: Sized;

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

In the 2024 Edition, rustfmt now produces:

#![allow(unused)]
fn main() {
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.