~~ lineWidth: 60, preferHanging: true ~~
== should print with type parameters hanging when they go over the limit ==
export class Test<TestingThisOut, WithVeryLong, TypeParameterList> {
}

[expect]
export class Test<TestingThisOut, WithVeryLong,
    TypeParameterList>
{
}

== should print with type parameters hanging and extends when they go over the limit ==
export class Test<TestingThisOut, WithVeryLong, TypeParameterList> extends Test {
}

[expect]
export class Test<TestingThisOut, WithVeryLong,
    TypeParameterList>
    extends Test
{
}

== should print with type parameters hanging, extends, and implements when they go over the limit ==
export class Test<TestingThisOut, WithVeryLong, TypeParameterList> extends Test implements Other {
}

[expect]
export class Test<TestingThisOut, WithVeryLong,
    TypeParameterList>
    extends Test
    implements Other
{
}

== should print with type parameters on multiple lines ==
export class Test<
TestingThisOut, WithVeryLong, TypeParameterList> {
}

[expect]
export class Test<
    TestingThisOut,
    WithVeryLong,
    TypeParameterList,
> {
}

== should print with type parameters on multiple lines and extends ==
export class Test<
    TestingThisOut, WithVeryLong, TypeParameterList> extends Test {
}

[expect]
export class Test<
    TestingThisOut,
    WithVeryLong,
    TypeParameterList,
> extends Test {
}

== should not split up within an implements ==
export class Test implements Testing, ThisOutABitHere<Tes, This, Out, With, A, Long> {
}

[expect]
export class Test
    implements Testing,
        ThisOutABitHere<Tes, This, Out, With, A, Long>
{
}

== should print multiple implements that go over the line width twice ==
export class Test implements Other, Other2, Other3, Other4, Other5, Other6, Other7 {
}

[expect]
export class Test
    implements Other, Other2, Other3, Other4, Other5,
        Other6, Other7
{
}
