From 9778a5ef7850d7be325ecc6edb3f148f7b6c7bb6 Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Thu, 11 Apr 2024 21:40:10 -0700 Subject: [PATCH] Router: to debug, use FileLine in binpack policies --- .../scala/org/scalafmt/internal/FormatOps.scala | 15 ++++++++------- .../main/scala/org/scalafmt/internal/Router.scala | 11 ++++++++--- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala index caf1e350d2..cabe230ffa 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatOps.scala @@ -322,14 +322,15 @@ class FormatOps( getOneArgPerLineSplitsAfterComma(right, splits) } - def splitOneArgPerLineAfterCommaOnBreak(comma: T): Policy = - delayedBreakPolicyBefore(comma) { - Policy.after(comma) { - case Decision(t @ FormatToken(`comma`, right, _), splits) - if !right.is[T.Comment] || t.hasBreak => - getOneArgPerLineSplitsAfterComma(right, splits) - } + def splitOneArgPerLineAfterCommaOnBreak( + comma: T, + )(implicit fileLine: FileLine): Policy = delayedBreakPolicyBefore(comma) { + Policy.after(comma) { + case Decision(t @ FormatToken(`comma`, right, _), splits) + if !right.is[T.Comment] || t.hasBreak => + getOneArgPerLineSplitsAfterComma(right, splits) } + } private def getOneArgPerLineSplitsAfterComma(r: T, s: Seq[Split]) = if (r.is[T.LeftBrace]) SplitTag.OneArgPerLine.activateOnly(s) 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 0276bd6843..97453e2172 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 @@ -1275,17 +1275,22 @@ class Router(formatOps: FormatOps) { } val nlPolicy = { - def newlineBeforeClose = decideNewlinesOnlyBeforeClose(close) + def newlineBeforeClose(implicit fileLine: FileLine) = + decideNewlinesOnlyBeforeClose(close) def binPackOnelinePolicyOpt = if (needOnelinePolicy) nextCommaOnelinePolicy else Some(NoPolicy) - def bothPolicies = newlineBeforeClose & binPackOnelinePolicyOpt + def bothPolicies(implicit fileLine: FileLine) = newlineBeforeClose & + binPackOnelinePolicyOpt + def configStylePolicy(implicit fileLine: FileLine) = + splitOneArgOneLine(close, leftOwner) | newlineBeforeClose + if (flags.configStyle != ConfigStyle.None) if ( (style.newlines.source == Newlines.keep && flags.configStyle == ConfigStyle.Source) || styleMap.forcedBinPack(leftOwner) ) bothPolicies - else splitOneArgOneLine(close, leftOwner) | newlineBeforeClose + else configStylePolicy else if ( flags.dangleForTrailingCommas || flags.shouldDangle &&