rustfmt
rustfmt copied to clipboard
Format issue on supertrait with bounds on associated types.
For all version I could tests (master and nightly)
this code:
pub trait MyLongTraitName:
MyLongBoundName<
MyLongAssociatedType:
SomeAnotherBound<
YetAnotherType: YetAnotherBound,
YetAnotherType2: YetAnotherBound2
>,
OtherType: SmallBound
+ SmallBound2
+ AnotherLongBound<
WithSomeType: BeingBound,
WithSomeType2: BeingBound,
WithSomeType3: BeingBound
>
+ SmallBound3
+ AnotherLongBound2<
WithSomeType: BeingBound,
WithSomeType2: BeingBound,
WithSomeType3: BeingBound
>,
>
{
}
fn main() {}
gets formatted into:
pub trait MyLongTraitName:
MyLongBoundName<
MyLongAssociatedType: SomeAnotherBound<
YetAnotherType: YetAnotherBound,
YetAnotherType2: YetAnotherBound2,
>,
OtherType: SmallBound
+ SmallBound2
+ AnotherLongBound<
WithSomeType: BeingBound,
WithSomeType2: BeingBound,
WithSomeType3: BeingBound,
> + SmallBound3
+ AnotherLongBound2<
WithSomeType: BeingBound,
WithSomeType2: BeingBound,
WithSomeType3: BeingBound,
>,
>
{
}
fn main() {}
Thanks for the report. Confirming I can reproduce this the latest master rustfmt 1.7.1-nightly (1a70f40d7f 2024-09-03)
It seems those types are formatted with the overflow formatting, do you suggest to change the overflow formatting or change formatting so it doesn't go into overflow?
@gui1117 have you started looking into this issue?
@gui1117 have you started looking into this issue?
Not really, and I would prefer not because I struggle to understand the code. But I look a bit when I have free time.
@gui1117 no worries. Based on https://github.com/rust-lang/rustfmt/issues/6316#issuecomment-2339597525 I thought maybe you'd looked through the code.
Not really, and I would prefer not because I struggle to understand the code.
It's quite a tricky part of the codebase. Definitely don't feel obligated to dive in.
Smaller example without any nesting, though I'm sure the nesting doesn't help:
pub trait Example<Inner = ()>:
ExampleImplementation<
Inner,
MoreParam,
AnotherParam,
AnotherParamAgain,
YetAnotherParam,
AFurtherParam,
>
{
}