diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/Policy.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/Policy.scala index 46d5cbc35..2703164cc 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/Policy.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/Policy.scala @@ -108,9 +108,10 @@ object Policy { fileLine: FileLine, ): Policy = new Switch(policy, trigger, NoPolicy) - def on(token: Token, prefix: String, noDequeue: Boolean = false)(f: Pf)( - implicit fileLine: FileLine, - ): Policy = apply(End == token, prefix, noDequeue)(f) + def on(token: Token, prefix: String, noDequeue: Boolean = false, rank: Int = 0)( + f: Pf, + )(implicit fileLine: FileLine): Policy = + apply(End == token, prefix, noDequeue, rank = rank)(f) abstract class Clause(implicit val fileLine: FileLine) extends Policy { val endPolicy: End.WithPos 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 1ff98dde3..49fc1297c 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 @@ -780,6 +780,17 @@ class Router(formatOps: FormatOps) { // DefDef case FormatToken(_: T.KwDef, _: T.Ident, _) => Seq(Split(Space, 0)) + case FormatToken(open @ LeftParenOrBracket(), _, _) + if ft.meta.formatOff && + leftOwner.isAny[Member.SyntaxValuesClause, Member.Tuple] => + val close = matching(open).left + def splits(xft: FormatToken, policy: Policy)(implicit l: FileLine) = + Seq(Split(Provided(xft), 0, policy = policy)) + val policy = Policy.on(close, "(FMT:OFF)", rank = Int.MaxValue) { + case Decision(xft, _) => splits(xft, NoPolicy) + } + splits(ft, policy) + // Parameter opening for one parameter group. This format works // on the WHOLE defnSite (via policies) case FormatToken(LeftParenOrBracket(), _, _) diff --git a/scalafmt-tests/shared/src/test/resources/scalajs/DefDef.stat b/scalafmt-tests/shared/src/test/resources/scalajs/DefDef.stat index 05bf78abd..0cbfafac2 100644 --- a/scalafmt-tests/shared/src/test/resources/scalajs/DefDef.stat +++ b/scalafmt-tests/shared/src/test/resources/scalajs/DefDef.stat @@ -1052,7 +1052,7 @@ abstract class GeneratedRouter extends Router { // format: on } ->>> { stateVisits = 936042, stateVisits2 = 936042 } +>>> { stateVisits = 359, stateVisits2 = 359 } abstract class GeneratedRouter extends Router { // format: off diff --git a/scalafmt-tests/shared/src/test/resources/unit/FormatOff.stat b/scalafmt-tests/shared/src/test/resources/unit/FormatOff.stat index d688da478..80ec5d7c3 100644 --- a/scalafmt-tests/shared/src/test/resources/unit/FormatOff.stat +++ b/scalafmt-tests/shared/src/test/resources/unit/FormatOff.stat @@ -229,7 +229,7 @@ object SearchStateExploded { """ } ->>> { stateVisits = 353, stateVisits2 = 353 } +>>> { stateVisits = 313, stateVisits2 = 313 } // format: off object SearchStateExploded { val veryLongString = 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 2c16edee0..fa21c7812 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 { override def afterAll(): Unit = { logger.debug(s"Total explored: ${Debug.explored}") if (!onlyUnit && !onlyManual) - assertEquals(Debug.explored, 3656127, "total explored") + assertEquals(Debug.explored, 1784375, "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 :'(