From 6a62cf786e8d220a1756ca7c051b69a1a350cd3e Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Wed, 9 Oct 2024 08:11:56 -0700 Subject: [PATCH] Router: move up check for no NL after `<-` enums It might have been overridden by `newlines.forceBeforeAssign` param. --- .../scala/org/scalafmt/internal/Router.scala | 19 +++++++++++-------- .../test/resources/scala3/OptionalBraces.stat | 12 ++++++------ .../resources/scala3/OptionalBraces_fold.stat | 9 +++------ .../resources/scala3/OptionalBraces_keep.stat | 12 ++++++------ .../scala3/OptionalBraces_unfold.stat | 9 +++------ .../test/scala/org/scalafmt/FormatTests.scala | 2 +- 6 files changed, 30 insertions(+), 33 deletions(-) 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 71b7d75f4..747f08b4c 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 @@ -2615,6 +2615,16 @@ class Router(formatOps: FormatOps) { else if (isRightCommentWithBreak(ft)) Seq(CtrlBodySplits.withIndent(Split(Space.orNL(ft), 0), body, endFt)) else if (isJsNative(body)) Seq(Split(Space, 0).withSingleLine(endFt.left)) + else if ( + style.dialect.allowSignificantIndentation && + (style.newlines.sourceIgnored || ft.noBreak) && body.parent.exists { + case p: Enumerator.Assign => (p.body eq body) && p.parent.exists { + case pp: Term.EnumeratorsBlock => isEnclosedInParens(pp) + case _ => false + } + case _ => false + } + ) Seq(Split(Space, 0).withIndents(spaceIndents)) else if (style.newlines.forceBeforeAssign(ft.meta.leftOwner)) Seq(CtrlBodySplits.withIndent(Split(Newline2x(ft), 0), body, endFt)) else if (style.newlines.shouldForceBeforeMultilineAssign(ft.meta.leftOwner)) @@ -2717,7 +2727,7 @@ class Router(formatOps: FormatOps) { if (!style.align.arrowEnumeratorGenerator) Seq.empty else Seq(Indent(StateColumn, expire, After)) getSplitsDefValEquals(body, endFt, spaceIndents) { - def splits = CtrlBodySplits.get(body, spaceIndents) { + CtrlBodySplits.get(body, spaceIndents) { if (spaceIndents.nonEmpty) Split(Space, 0).withIndents(spaceIndents) else { val noSlb = body match { @@ -2729,13 +2739,6 @@ class Router(formatOps: FormatOps) { else Split(Space, 0).withSingleLine(expire) } }(cost => CtrlBodySplits.withIndent(Split(Newline2x(ft), cost), endFt)) - body.parent.parent match { - case Some(pp: Term.EnumeratorsBlock) - if style.dialect.allowSignificantIndentation && - isEnclosedInParens(pp) => - Seq(Split(Space, 0).withIndents(spaceIndents)) - case _ => splits - } } } diff --git a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces.stat b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces.stat index 01bec11e6..4554686a2 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces.stat @@ -3981,7 +3981,8 @@ object a: object a: val abstractTypeNames = for ( - parent <- parents; + parent <- + parents; mbr <- parent.abstractTypeMembers if qualifies(mbr.symbol) ) yield mbr.name.asTypeName @@ -7355,7 +7356,8 @@ object a: for ( x <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; y <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; - z <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu + z <- + loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu ) yield x + y <<< #4219 forceBeforeAssign newlines.forceBeforeAssign = any @@ -7371,10 +7373,8 @@ object a: object a: val expression = for ( - x <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; - y <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; + x <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; + y <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; z <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu ) yield x + y 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 d187e7d54..6b30a83d0 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_fold.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_fold.stat @@ -7091,10 +7091,7 @@ object a: object a: val expression = for ( - x <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; - y <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; - z <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu + x <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; + y <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; + z <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu ) yield x + y diff --git a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_keep.stat b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_keep.stat index 96187b39b..5e8bb16d3 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_keep.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_keep.stat @@ -3942,7 +3942,8 @@ object a: object a: val abstractTypeNames = for ( - parent <- parents; + parent <- + parents; mbr <- parent.abstractTypeMembers if qualifies(mbr.symbol) ) yield mbr.name.asTypeName @@ -7384,7 +7385,8 @@ object a: val expression = for ( x <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; y <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; - z <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu + z <- + loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu ) yield x + y <<< #4219 forceBeforeAssign newlines.forceBeforeAssign = any @@ -7400,10 +7402,8 @@ object a: object a: val expression = for ( - x <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; - y <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; + x <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; + y <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; z <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu ) yield x + y diff --git a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_unfold.stat b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_unfold.stat index be9a73550..879cd32a0 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_unfold.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_unfold.stat @@ -7665,11 +7665,8 @@ object a: object a: val expression = for ( - x <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; - y <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; - z <- - loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu + x <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; + y <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu; + z <- loremipsumdolorsitametconsecteturadipiscingelitseddoeiusmodtemporincididu ) yield x + y 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 cc9b150f1..bd3b68f73 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, 1785622, "total explored") + assertEquals(Debug.explored, 1785882, "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 :'(