diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/config/Newlines.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/config/Newlines.scala index 52fdabe499..268b27a472 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/config/Newlines.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/config/Newlines.scala @@ -216,6 +216,13 @@ case class Newlines( @inline def sourceIgnored: Boolean = source.ignoreSourceSplit + def okSpaceForSource(newlines: Int, forFold: => Boolean = true): Boolean = + source match { + case Newlines.fold => forFold + case Newlines.unfold => false + case _ => newlines == 0 + } + @inline def keepBreak(newlines: => Int): Boolean = source.eq(Newlines.keep) && newlines != 0 diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala index 56856bd032..70be619b71 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala @@ -1275,21 +1275,11 @@ class FormatOps( ): (Boolean, NewlineT) = style.newlines.afterCurlyLambdaParams match { case Newlines.AfterCurlyLambdaParams.squash => (true, Newline) case Newlines.AfterCurlyLambdaParams.never => - val space = style.newlines.source match { - case Newlines.fold => true - case Newlines.unfold => false - case _ => newlines == 0 - } - (space, Newline) + (style.newlines.okSpaceForSource(newlines), Newline) case Newlines.AfterCurlyLambdaParams.always => (false, Newline2x) case Newlines.AfterCurlyLambdaParams.preserve => val blanks = newlines >= 2 - val space = style.newlines.source match { - case Newlines.fold => !blanks - case Newlines.unfold => false - case _ => newlines == 0 - } - (space, Newline2x(blanks)) + (style.newlines.okSpaceForSource(newlines, !blanks), Newline2x(blanks)) } def getNoSplit(ft: FormatToken, spaceOk: Boolean)(implicit diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/Router.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/Router.scala index 32d1498f67..40176658c1 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/Router.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/Router.scala @@ -1962,14 +1962,15 @@ class Router(formatOps: FormatOps) { Seq(Split(Space.orNL(!nlOnly), 0)) case FormatToken(T.RightBrace(), T.KwYield(), _) => Seq(Split(Space, 0)) - case FormatToken(_, kw @ (_: T.KwElse | _: T.KwYield), _) => - val expire = getLastToken(rightOwner) - val noSpace = shouldBreak(formatToken) - def exclude = insideBracesBlock(formatToken, expire) - val noSyntaxNL = kw.is[T.KwYield] - Seq( - Split(Space, 0).notIf(noSpace) - .withSingleLineNoOptimal(expire, exclude, noSyntaxNL = noSyntaxNL), + case FormatToken(_, kw @ (_: T.KwElse | _: T.KwYield), _) => Seq( + if (style.newlines.okSpaceForSource(newlines)) { + val expire = getLastToken(rightOwner) + Split(Space, 0).withSingleLineNoOptimal( + expire, + exclude = insideBracesBlock(formatToken, expire), + noSyntaxNL = kw.is[T.KwYield], + ) + } else Split.ignored, Split(Newline, 1), ) case ft @ FormatToken(_, _: T.KwThen | _: T.KwDo, _) => diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TokenOps.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TokenOps.scala index 56b201fe37..e17f089d2c 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TokenOps.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TokenOps.scala @@ -1,6 +1,5 @@ package org.scalafmt.util -import org.scalafmt.config.Newlines import org.scalafmt.config.ScalafmtConfig import org.scalafmt.internal.FormatToken import org.scalafmt.internal.Modification @@ -138,13 +137,6 @@ object TokenOps { !head.isLetter && head != '_' } - def shouldBreak(ft: FormatToken)(implicit style: ScalafmtConfig): Boolean = - style.newlines.source match { - case Newlines.classic | Newlines.keep => ft.hasBreak - case Newlines.fold => false - case Newlines.unfold => true - } - def getXmlLastLineIndent(tok: Xml.Part): Option[Int] = { val part = tok.value val afterLastNL = part.lastIndexOf('\n') + 1