Skip to content

Commit 3636854

Browse files
committed
FormatOps: use milder expire token for if-else
1 parent fc6b0b5 commit 3636854

File tree

3 files changed

+23
-23
lines changed

3 files changed

+23
-23
lines changed

scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala

+19
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,25 @@ class FormatOps(
168168
}
169169
}.fold(_.right, identity)
170170

171+
final def expireWithOptionalDelim(
172+
expire: FormatToken
173+
)(implicit style: ScalafmtConfig): FormatToken = {
174+
def wouldDangle: Boolean = expire.meta.rightOwner match {
175+
case p: Member.ParamClause =>
176+
!shouldNotDangleAtDefnSite(p.parent, false)
177+
case _: Member.Tuple =>
178+
style.danglingParentheses.tupleOrCallSite(true)
179+
case _: Member.ArgClause =>
180+
style.danglingParentheses.tupleOrCallSite(false)
181+
case _ => false
182+
}
183+
expire.right match {
184+
case _: T.Comma => next(expire)
185+
case RightParenOrBracket() if !wouldDangle => next(expire)
186+
case _ => expire
187+
}
188+
}
189+
171190
@tailrec
172191
final def endOfSingleLineBlock(
173192
start: FormatToken

scalafmt-core/shared/src/main/scala/org/scalafmt/internal/Router.scala

+3-21
Original file line numberDiff line numberDiff line change
@@ -2015,7 +2015,7 @@ class Router(formatOps: FormatOps) {
20152015
case FormatToken(_: T.KwIf, right, _) if leftOwner.is[Term.If] =>
20162016
val owner = leftOwner.asInstanceOf[Term.If]
20172017
val expireTree = if (ifWithoutElse(owner)) owner else owner.elsep
2018-
val expire = rhsOptimalToken(tokens.getLast(expireTree))
2018+
val expire = expireWithOptionalDelim(tokens.getLast(expireTree)).left
20192019
val mod =
20202020
if (style.newlines.keepBreak(newlines)) Newline
20212021
else Space(style.spaces.isSpaceAfterKeyword(right))
@@ -2089,7 +2089,7 @@ class Router(formatOps: FormatOps) {
20892089
Split(Space, 0)
20902090
)
20912091
case FormatToken(_, T.KwElse() | T.KwYield(), _) =>
2092-
val expire = rhsOptimalToken(tokens.getLast(rightOwner))
2092+
val expire = expireWithOptionalDelim(tokens.getLast(rightOwner)).left
20932093
val noSpace = shouldBreak(formatToken)
20942094
def exclude = insideBracesBlock(formatToken, expire)
20952095
val noSyntaxNL = formatToken.right.is[T.KwYield]
@@ -2722,28 +2722,10 @@ class Router(formatOps: FormatOps) {
27222722
private def getSplitsValEqualsClassic(ft: FormatToken, body: Tree)(implicit
27232723
style: ScalafmtConfig
27242724
): Seq[Split] = {
2725-
def wouldDangle = ft.meta.leftOwner.parent.exists {
2726-
case p: Member.ParamClause =>
2727-
!shouldNotDangleAtDefnSite(p.parent, false)
2728-
case _: Member.Tuple =>
2729-
style.danglingParentheses.tupleOrCallSite(true)
2730-
case p: Member.ArgClause =>
2731-
style.danglingParentheses.tupleOrCallSite(false) && (p.parent match {
2732-
case Some(_: Term.ApplyInfix) =>
2733-
style.newlines.formatInfix && p.values.lengthCompare(1) > 0
2734-
case _ => true
2735-
})
2736-
case _ => false
2737-
}
2738-
27392725
val expireFt = tokens.getLast(body)
27402726
val expire = expireFt.left
27412727
// rhsOptimalToken is too aggressive here
2742-
val optimalFt = expireFt.right match {
2743-
case _: T.Comma => next(expireFt)
2744-
case RightParenOrBracket() if !wouldDangle => next(expireFt)
2745-
case _ => expireFt
2746-
}
2728+
val optimalFt = expireWithOptionalDelim(expireFt)
27472729
val optimal = optimalFt.left
27482730
def optimalWithComment =
27492731
optimalFt.right match {

scalafmt-tests/src/test/resources/newlines/source_fold.stat

+1-2
Original file line numberDiff line numberDiff line change
@@ -7034,8 +7034,7 @@ class a {
70347034
)(in: Input[E]): Iteratee[E, Iteratee[E, A]] = in match {
70357035
case Input.El(e) => Iteratee.flatten(
70367036
Future(p(e))(pec).map(b =>
7037-
if (b) Done(inner, in)
7038-
else stepNoBreak(inner)(in)
7037+
if (b) Done(inner, in) else stepNoBreak(inner)(in)
70397038
)(dec)
70407039
)
70417040
case _ => stepNoBreak(inner)(in)

0 commit comments

Comments
 (0)