diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatTokens.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatTokens.scala index 4a44f0dd0e..23ec1f42ae 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatTokens.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatTokens.scala @@ -127,7 +127,7 @@ class FormatTokens(leftTok2tok: Map[TokenHash, Int])(val arr: Array[FormatToken] getDelimsIfEnclosed(tree).map(_._2) def isEnclosedInMatching(tokens: Tokens, tree: Tree): Boolean = - getHeadIfEnclosed(tokens, tree).isDefined + getDelimsIfEnclosed(tokens, tree).isDefined def isEnclosedInMatching(tree: Tree): Boolean = isEnclosedInMatching(tree.tokens, tree) 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 aca8f80877..ec825dda41 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 @@ -666,8 +666,14 @@ class Router(formatOps: FormatOps) { // New statement case FormatToken(_: T.Semicolon, _, StartsStatementRight(stmt)) if !stmt.is[Term.EndMarker] => + val noSpace = !style.newlines.okSpaceForSource(newlines) || + style.dialect.allowSignificantIndentation && + stmt.is[Case] && stmt.parent.forall { + case p: Tree.Block => !isEnclosedInMatching(p) + case _ => false + } Seq( - Split(!style.newlines.okSpaceForSource(newlines), 0)(Space) + Split(noSpace, 0)(Space) .withSingleLine(endOfSingleLineBlock(getLast(stmt))), // For some reason, this newline cannot cost 1. Split(Newline2x(ft), 0), diff --git a/scalafmt-tests-community/scala3/src/test/scala/org/scalafmt/community/scala3/CommunityScala3Suite.scala b/scalafmt-tests-community/scala3/src/test/scala/org/scalafmt/community/scala3/CommunityScala3Suite.scala index 1d86a72961..ee7a839208 100644 --- a/scalafmt-tests-community/scala3/src/test/scala/org/scalafmt/community/scala3/CommunityScala3Suite.scala +++ b/scalafmt-tests-community/scala3/src/test/scala/org/scalafmt/community/scala3/CommunityScala3Suite.scala @@ -9,7 +9,7 @@ abstract class CommunityScala3Suite(name: String) class CommunityScala3_2Suite extends CommunityScala3Suite("scala-3.2") { - override protected def totalStatesVisited: Option[Int] = Some(32288017) + override protected def totalStatesVisited: Option[Int] = Some(32288009) override protected def builds = Seq(getBuild("3.2.2", dialects.Scala32, 791)) @@ -17,7 +17,7 @@ class CommunityScala3_2Suite extends CommunityScala3Suite("scala-3.2") { class CommunityScala3_3Suite extends CommunityScala3Suite("scala-3.3") { - override protected def totalStatesVisited: Option[Int] = Some(34858906) + override protected def totalStatesVisited: Option[Int] = Some(34858898) override protected def builds = Seq(getBuild("3.3.3", dialects.Scala33, 861)) diff --git a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_fold.stat b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_fold.stat index 8b0714636f..030e231bde 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_fold.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_fold.stat @@ -7239,12 +7239,7 @@ tag match node.refPrivate = in0.readByte() == PRIVATE; case _ => >>> -test does not parse: [dialect scala3] `outdent` expected but `case` found tag match case TYPEREFsymbol | TYPEREFdirect | TERMREFsymbol | TERMREFdirect => - node.refPrivate = in0.readByte() == PRIVATE; case _ => - ^ -====== full result: ====== -tag match - case TYPEREFsymbol | TYPEREFdirect | TERMREFsymbol | TERMREFdirect => - node.refPrivate = in0.readByte() == PRIVATE; case _ => + node.refPrivate = in0.readByte() == PRIVATE; + case _ => diff --git a/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala b/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala index a38123b17a..43896ac07e 100644 --- a/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala +++ b/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala @@ -137,7 +137,7 @@ class FormatTests extends FunSuite with CanRunTests with FormatAssertions { val explored = Debug.explored.get() logger.debug(s"Total explored: $explored") if (!onlyUnit && !onlyManual) - assertEquals(explored, 1497994, "total explored") + assertEquals(explored, 1498031, "total explored") val results = debugResults.result() // TODO(olafur) don't block printing out test results. // I don't want to deal with scalaz's Tasks :'(