Skip to content

Commit

Permalink
FormatOps vertical multiline: fix interleaved defs
Browse files Browse the repository at this point in the history
  • Loading branch information
kitbellew committed Feb 20, 2023
1 parent 8951c58 commit 1a5d931
Show file tree
Hide file tree
Showing 5 changed files with 249 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1191,12 +1191,30 @@ class FormatOps(
val indentSep = Num((indentParam.n - 2).max(0))
val isBracket = open.is[T.LeftBracket]

val allParenOwners = (lpParent match {
@tailrec
def getClauses(popt: Option[Tree]): Seq[Member.ParamClause] = popt match {
case Some(t: Member.ParamClauseGroup) => getClauses(t.parent)
case Some(t: Tree.WithParamClauseGroups) =>
t.paramClauseGroups.flatMap(getClausesFromClauseGroup)
case Some(t: Tree.WithParamClauseGroup) =>
t.paramClauseGroup.map(getClausesFromClauseGroup).getOrElse(Nil)
case Some(t: Stat.WithCtor with Tree.WithTParamClause) =>
t.tparamClause +: t.ctor.paramClauses
case Some(t: Tree.WithParamClauses) => t.paramClauses
case Some(t: Stat.WithCtor) => t.ctor.paramClauses
case Some(t: Tree.WithTParamClause) => t.tparamClause :: Nil
case _ => Nil
}).filter(_.pos.start > open.start)

}
def getClausesFromClauseGroup(tree: Member.ParamClauseGroup) = {
val tparams = tree.tparamClause
val params = tree.paramClauses
if (tparams.isEmpty) params else tparams :: params
}
val allClauses = lpOwner match {
case _: Member.ParamClause => getClauses(lpParent)
case _ => Nil
}
val allParenOwners = allClauses.filter(_.pos.start > open.start)
val allOwners = lpOwner +: allParenOwners

// find the last param on the defn so that we can apply our `policy`
Expand Down
72 changes: 57 additions & 15 deletions scalafmt-tests/src/test/resources/scala3/OptionalBraces.stat
Original file line number Diff line number Diff line change
Expand Up @@ -4127,15 +4127,23 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(implicit c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](implicit c: C): B = ???
)[C](
implicit c: C
): B = ???
class F(
a: A,
as: A*
Expand Down Expand Up @@ -4171,15 +4179,23 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(implicit c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](implicit c: C): B = ???
)[C](
implicit c: C
): B = ???
class F(
a: A,
as: A*
Expand Down Expand Up @@ -4214,15 +4230,23 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(implicit c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](implicit c: C): B = ???
)[C](
implicit c: C
): B = ???
class F(
a: A,
as: A*
Expand Down Expand Up @@ -4258,13 +4282,19 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(implicit
c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](
Expand Down Expand Up @@ -4311,13 +4341,19 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(
implicit c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](
Expand Down Expand Up @@ -4360,14 +4396,20 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(
implicit
c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](
Expand Down
72 changes: 57 additions & 15 deletions scalafmt-tests/src/test/resources/scala3/OptionalBraces_fold.stat
Original file line number Diff line number Diff line change
Expand Up @@ -3938,15 +3938,23 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(implicit c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](implicit c: C): B = ???
)[C](
implicit c: C
): B = ???
class F(
a: A,
as: A*
Expand Down Expand Up @@ -3982,15 +3990,23 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(implicit c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](implicit c: C): B = ???
)[C](
implicit c: C
): B = ???
class F(
a: A,
as: A*
Expand Down Expand Up @@ -4025,15 +4041,23 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(implicit c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](implicit c: C): B = ???
)[C](
implicit c: C
): B = ???
class F(
a: A,
as: A*
Expand Down Expand Up @@ -4069,13 +4093,19 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(implicit
c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](
Expand Down Expand Up @@ -4122,13 +4152,19 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(
implicit c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](
Expand Down Expand Up @@ -4171,14 +4207,20 @@ object a:
class F(a: A, as: A*)(b: B, bs: B*)(implicit c: C, d: D, implicit e: E) {}
>>>
object a:
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)(
implicit
c: C
): B = ???
def f[A](a: A, as: A*)[B](
def f[A](
a: A,
as: A*
)[B](
b: B,
bs: B*
)[C](
Expand Down
Loading

0 comments on commit 1a5d931

Please sign in to comment.