From 7b9b2ba0279c1d0fd175527dbb87071f9e6d2895 Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Sat, 6 Jan 2024 14:07:37 -0800 Subject: [PATCH] TreeOps: handle trailing-comma case for owners --- .../src/main/scala/org/scalafmt/util/TreeOps.scala | 9 +++++++++ .../resources/trailing-commas/trailingCommasAlways.stat | 1 - .../trailingCommasAlwaysDanglingParens.stat | 1 - .../trailing-commas/trailingCommasAlwaysSingleLine.stat | 1 - .../trailing-commas/trailingCommasMultiple.stat | 1 - .../trailingCommasMultipleDanglingParens.stat | 1 - .../resources/trailing-commas/trailingCommasNever.stat | 1 - .../trailing-commas/trailingCommasNeverSingleLine.stat | 1 - .../trailing-commas/trailingCommasPreserve.stat | 4 ++-- 9 files changed, 11 insertions(+), 9 deletions(-) diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TreeOps.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TreeOps.scala index 62c1bf1a83..eaee3b60b4 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TreeOps.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/util/TreeOps.scala @@ -933,6 +933,7 @@ object TreeOps { var children = rest var prevChild: Tree = null var prevLPs = outerPrevLPs + var prevComma: Token = null @tailrec def tokenAt(idx: Int): Int = { @@ -954,6 +955,7 @@ object TreeOps { children = rest nextChildStart = start } + prevComma = null tokenAt(nextIdx) } else { def excludeRightParen: Boolean = elem match { @@ -975,12 +977,19 @@ object TreeOps { else { setOwner(tok, prevChild) setOwner(prevParens.head, prevChild) + if (prevComma != null) + setOwner(prevComma, prevChild) } prevLPs -= 1 prevParens = prevParens.tail + prevComma = null + } else if (tok.is[Comma]) { + prevComma = tok + setOwner(tok, elem) } else { setOwner(tok, elem) if (!tok.is[Trivia] && tokStart != tok.end) { + prevComma = null prevChild = null if (tok.is[LeftParen]) { prevLPs += 1 diff --git a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlways.stat b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlways.stat index 3881b0f55b..889f941922 100644 --- a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlways.stat +++ b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlways.stat @@ -372,7 +372,6 @@ val x = ( x => x + 1, ) >>> -Idempotency violated val x = ( x => x + 1, ) diff --git a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlwaysDanglingParens.stat b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlwaysDanglingParens.stat index 143db178ff..f261d37fe7 100644 --- a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlwaysDanglingParens.stat +++ b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlwaysDanglingParens.stat @@ -352,7 +352,6 @@ val x = ( x => x + 1, ) >>> -Idempotency violated val x = ( x => x + 1, ) diff --git a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlwaysSingleLine.stat b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlwaysSingleLine.stat index 66e393bc50..b0704c2279 100644 --- a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlwaysSingleLine.stat +++ b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasAlwaysSingleLine.stat @@ -37,5 +37,4 @@ val x = ( x => x + 1, ) >>> -Idempotency violated val x = (x => x + 1) diff --git a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasMultiple.stat b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasMultiple.stat index 0580a0b79c..17d568844d 100644 --- a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasMultiple.stat +++ b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasMultiple.stat @@ -356,7 +356,6 @@ val x = ( x => x + 1, ) >>> -Idempotency violated val x = ( x => x + 1 ) diff --git a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasMultipleDanglingParens.stat b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasMultipleDanglingParens.stat index ef7072505d..b120a4fa2a 100644 --- a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasMultipleDanglingParens.stat +++ b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasMultipleDanglingParens.stat @@ -352,7 +352,6 @@ val x = ( x => x + 1, ) >>> -Idempotency violated val x = ( x => x + 1 ) diff --git a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasNever.stat b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasNever.stat index 868db7bc96..be4020068e 100644 --- a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasNever.stat +++ b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasNever.stat @@ -113,7 +113,6 @@ val x = ( x => x + 1, ) >>> -Idempotency violated val x = ( x => x + 1 ) diff --git a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasNeverSingleLine.stat b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasNeverSingleLine.stat index 9c6e40a7e2..edf54fade5 100644 --- a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasNeverSingleLine.stat +++ b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasNeverSingleLine.stat @@ -37,5 +37,4 @@ val x = ( x => x + 1, ) >>> -Idempotency violated val x = (x => x + 1) diff --git a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasPreserve.stat b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasPreserve.stat index 366851db5a..1a41d79458 100644 --- a/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasPreserve.stat +++ b/scalafmt-tests/src/test/resources/trailing-commas/trailingCommasPreserve.stat @@ -379,5 +379,5 @@ val x = ( ) >>> val x = ( - x => x + 1, - ) + x => x + 1, +)