From c8fb00e4269dbfe6726abf013f058b82eaa182cc Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:36:18 -0700 Subject: [PATCH] FormatOps: get ClauseSiteFlags fields implicitly --- .../org/scalafmt/internal/FormatOps.scala | 25 ++++++++++++------- .../scala/org/scalafmt/internal/Router.scala | 14 +++++------ 2 files changed, 22 insertions(+), 17 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 b715c0a3df..d91a1a8838 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 @@ -850,20 +850,18 @@ class FormatOps( cfg: Newlines.ConfigStyleElement, ): Boolean = cfg.getForceIfOptimized && forceConfigStyle(ft.meta.idx) - def preserveConfigStyle(ft: FormatToken, breakBeforeClose: => Boolean)( - implicit - style: ScalafmtConfig, - clauseSiteFlags: ClauseSiteFlags, - ): Boolean = clauseSiteFlags.configStyle.prefer && - couldPreserveConfigStyle(ft, breakBeforeClose) + def preserveConfigStyle( + ft: FormatToken, + breakBeforeClose: => Boolean, + )(implicit style: ScalafmtConfig, clauseSiteFlags: ClauseSiteFlags): Boolean = + preferConfigStyle && couldPreserveConfigStyle(ft, breakBeforeClose) def couldPreserveConfigStyle(ft: FormatToken, breakBeforeClose: => Boolean)( implicit style: ScalafmtConfig, clauseSiteFlags: ClauseSiteFlags, ): Boolean = !style.newlines.sourceIgnored && { - !clauseSiteFlags.dangleCloseDelim && !clauseSiteFlags.alignOpenDelim || - ft.hasBreak || + !dangleCloseDelim && !alignOpenDelim || ft.hasBreak || (next(ft).hasBreak || style.newlines.forceAfterImplicitParamListModifier) && opensConfigStyleImplicitParamList(ft) } && breakBeforeClose @@ -2670,7 +2668,7 @@ class FormatOps( )(implicit style: ScalafmtConfig, clauseSiteFlags: ClauseSiteFlags) = { implicit val configStyle = clauseSiteFlags.configStyle val configStylePrefer = configStyle.prefer - val shouldDangle = clauseSiteFlags.dangleCloseDelim + val shouldDangle = dangleCloseDelim val sourceIgnored = style.newlines.sourceIgnored val configStyleSource = configStylePrefer && !sourceIgnored val dangleForTrailingCommas = getMustDangleForTrailingCommas(ftBeforeClose) @@ -2945,6 +2943,15 @@ object FormatOps { ) } + def preferConfigStyle(implicit clauseSiteFlags: ClauseSiteFlags): Boolean = + clauseSiteFlags.configStyle.prefer + + def dangleCloseDelim(implicit clauseSiteFlags: ClauseSiteFlags): Boolean = + clauseSiteFlags.dangleCloseDelim + + def alignOpenDelim(implicit clauseSiteFlags: ClauseSiteFlags): Boolean = + clauseSiteFlags.alignOpenDelim + class ExtractFromMeta[A](f: FormatToken.Meta => Option[A]) { def unapply(meta: FormatToken.Meta): Option[A] = f(meta) } 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 f14eed4a6b..80754ae41e 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 @@ -922,8 +922,7 @@ class Router(formatOps: FormatOps) { else defnSiteLastToken(afterClose, leftOwner) val wouldDangle = onlyConfigStyle || mustDangleForTrailingCommas || - clauseSiteFlags.dangleCloseDelim || - closeBreak && beforeClose.left.is[T.Comment] + dangleCloseDelim || closeBreak && beforeClose.left.is[T.Comment] val optimalIsComment = optimal.is[T.Comment] val newlinePolicy: Policy = Policy ? @@ -946,7 +945,7 @@ class Router(formatOps: FormatOps) { val rightIsComment = right.is[T.Comment] - val align = !rightIsComment && clauseSiteFlags.alignOpenDelim && + val align = !rightIsComment && alignOpenDelim && (!handleImplicit || style.newlines.forceAfterImplicitParamListModifier) val alignTuple = align && tupleSite && !onlyConfigStyle @@ -1178,7 +1177,7 @@ class Router(formatOps: FormatOps) { if (nlCloseOnOpen eq NlClosedOnOpen.Cfg) indentLen else bpIndentLen def noSplitIndents = - if (clauseSiteFlags.alignOpenDelim) getOpenParenAlignIndents(close) + if (alignOpenDelim) getOpenParenAlignIndents(close) else Seq(Indent(bpIndentLen, close, Before)) Seq( @@ -1260,8 +1259,7 @@ class Router(formatOps: FormatOps) { } val trigger = leftOwner.parent.flatMap(iter) Seq(trigger.fold(indent)(x => Indent.before(indent, x))) - } else if (clauseSiteFlags.alignOpenDelim) - getOpenParenAlignIndents(close) + } else if (alignOpenDelim) getOpenParenAlignIndents(close) else Seq(indent) val nextComma = @@ -1301,7 +1299,7 @@ class Router(formatOps: FormatOps) { ) val res = if (nlClosedOnOpenOk) nlCloseOnOpen - else if (clauseSiteFlags.configStyle.prefer) NlClosedOnOpen.Cfg + else if (preferConfigStyle) NlClosedOnOpen.Cfg else NlClosedOnOpen.Yes res match { case NlClosedOnOpen.Cfg if styleMap.forcedBinPack(leftOwner) => @@ -2099,7 +2097,7 @@ class Router(formatOps: FormatOps) { def newlineSplit(cost: Int, forceDangle: Boolean)(implicit fileLine: FileLine, ) = { - val shouldDangle = forceDangle || clauseSiteFlags.dangleCloseDelim + val shouldDangle = forceDangle || dangleCloseDelim Split(Newline, cost) .withPolicy(decideNewlinesOnlyBeforeClose(close), !shouldDangle) .withIndent(style.indent.callSite, close, Before)