From 3ad7a7ecffc86d476349681ea486d140e7473858 Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Tue, 19 Nov 2024 22:44:54 -0800 Subject: [PATCH 1/2] Test match with/without dot and trailing comment --- .../test/resources/scala3/OptionalBraces.stat | 20 +++++++++++++++++ .../resources/scala3/OptionalBraces_fold.stat | 20 +++++++++++++++++ .../resources/scala3/OptionalBraces_keep.stat | 20 +++++++++++++++++ .../scala3/OptionalBraces_unfold.stat | 22 +++++++++++++++++++ .../test/scala/org/scalafmt/FormatTests.scala | 2 +- 5 files changed, 83 insertions(+), 1 deletion(-) diff --git a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces.stat b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces.stat index 7e3a4ba871..117c6d8c8d 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces.stat @@ -7603,3 +7603,23 @@ object a { .match case _ => } +<<< match with dot, trailing case comment +object a: + b.c.match + case d if e => f + // comment +>>> +object a: + b.c.match + case d if e => f + // comment +<<< match without dot, trailing case comment +object a: + b.c match + case d if e => f + // comment +>>> +object a: + b.c match + case d if e => f + // comment 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 5d45dec21e..ed8f22d5a1 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_fold.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_fold.stat @@ -7311,3 +7311,23 @@ object a { (a.b(c)).match case _ => } +<<< match with dot, trailing case comment +object a: + b.c.match + case d if e => f + // comment +>>> +object a: + b.c.match + case d if e => f + // comment +<<< match without dot, trailing case comment +object a: + b.c match + case d if e => f + // comment +>>> +object a: + b.c match + case d if e => f + // comment 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 d675ccc27c..7c8601f8d4 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_keep.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_keep.stat @@ -7630,3 +7630,23 @@ object a { (a.b(c)).match case _ => } +<<< match with dot, trailing case comment +object a: + b.c.match + case d if e => f + // comment +>>> +object a: + b.c.match + case d if e => f + // comment +<<< match without dot, trailing case comment +object a: + b.c match + case d if e => f + // comment +>>> +object a: + b.c match + case d if e => f + // comment 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 4458bed87c..be0e01ef0a 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_unfold.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_unfold.stat @@ -7919,3 +7919,25 @@ object a { (a.b(c)).match case _ => } +<<< match with dot, trailing case comment +object a: + b.c.match + case d if e => f + // comment +>>> +Idempotency violated +=> Diff (- obtained, + expected) + f +- // comment ++ // comment +<<< match without dot, trailing case comment +object a: + b.c match + case d if e => f + // comment +>>> +object a: + b.c match + case d if e => + f + // comment 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 77937b4ad7..fe052f8673 100644 --- a/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala +++ b/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala @@ -144,7 +144,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, 1083470, "total explored") + assertEquals(explored, 1083760, "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 :'( From 2a6c93208ce111679960aba7e5c6229d7f91e617 Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Tue, 19 Nov 2024 22:54:55 -0800 Subject: [PATCH 2/2] FormatTokens: fix getLastExceptParen, incl comment --- .../scala/org/scalafmt/internal/FormatTokens.scala | 5 +++-- .../community/spark/CommunitySparkSuite.scala | 2 +- .../test/resources/scala3/OptionalBraces_unfold.stat | 11 ++++++----- 3 files changed, 10 insertions(+), 8 deletions(-) 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 31cae42ad9..be3215b8ab 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 @@ -161,8 +161,9 @@ class FormatTokens(leftTok2tok: Map[TokenHash, Int])(val arr: Array[FT]) def getLastExceptParen(tree: Tree): FT = { val tokens = tree.tokens - val last = getLastNonTrivial(tokens, tree) - getClosingIfWithinParens(last)(getHead(tokens, tree)).getOrElse(last) + val last = getLast(tokens, tree) + getClosingIfWithinParens(prevNonComment(last))(getHead(tokens, tree)) + .getOrElse(last) } final def findTokenWith[A](ft: FT, iter: FT => FT)( diff --git a/scalafmt-tests-community/spark/src/test/scala/org/scalafmt/community/spark/CommunitySparkSuite.scala b/scalafmt-tests-community/spark/src/test/scala/org/scalafmt/community/spark/CommunitySparkSuite.scala index 98c85b26c0..2de84f6f00 100644 --- a/scalafmt-tests-community/spark/src/test/scala/org/scalafmt/community/spark/CommunitySparkSuite.scala +++ b/scalafmt-tests-community/spark/src/test/scala/org/scalafmt/community/spark/CommunitySparkSuite.scala @@ -18,7 +18,7 @@ class CommunitySpark3_4Suite extends CommunitySparkSuite("spark-3.4") { class CommunitySpark3_5Suite extends CommunitySparkSuite("spark-3.5") { - override protected def totalStatesVisited: Option[Int] = Some(91352350) + override protected def totalStatesVisited: Option[Int] = Some(91352348) override protected def builds = Seq(getBuild("v3.5.3", dialects.Scala213, 2756)) 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 be0e01ef0a..fd57e5dc80 100644 --- a/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_unfold.stat +++ b/scalafmt-tests/shared/src/test/resources/scala3/OptionalBraces_unfold.stat @@ -7925,11 +7925,12 @@ object a: case d if e => f // comment >>> -Idempotency violated -=> Diff (- obtained, + expected) - f -- // comment -+ // comment +object a: + b.c + .match + case d if e => + f + // comment <<< match without dot, trailing case comment object a: b.c match