From b7cc8ec0e73747610490b61a59898dbec0cb15ad Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Sun, 24 Nov 2024 13:18:52 -0800 Subject: [PATCH] PolicyOps: add `exclude` to `PenalizeAllNewlines` --- .../scala/org/scalafmt/internal/Router.scala | 22 +++++++------------ .../scala/org/scalafmt/util/PolicyOps.scala | 8 +++++-- 2 files changed, 14 insertions(+), 16 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 10e8fbf96b..4e115a5505 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 @@ -1119,20 +1119,14 @@ class Router(formatOps: FormatOps) { SingleLineBlock(close, noSyntaxNL = true) else if (isBracket) PenalizeAllNewlines(close, newlinePenalty, penalizeLambdas = false) - else { - val penalty = - if (!multipleArgs) newlinePenalty else Constants.ShouldBeNewline - policyWithExclude( - excludeBlocks, - Policy.End.OnLeft, - Policy.End.OnLeft, - )(PenalizeAllNewlines( - close, - penalty = penalty, - penalizeLambdas = multipleArgs, - noSyntaxNL = multipleArgs, - )) - } + else PenalizeAllNewlines( + close, + penalty = + if (!multipleArgs) newlinePenalty else Constants.ShouldBeNewline, + penalizeLambdas = multipleArgs, + noSyntaxNL = multipleArgs, + exclude = excludeBlocks, + ) val preferNoSplit = !skipNoSplit && singleArgument && style.newlines.keepBreak(noBreak()) diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/util/PolicyOps.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/util/PolicyOps.scala index 51c308d5b4..129e095dd4 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/util/PolicyOps.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/util/PolicyOps.scala @@ -36,13 +36,17 @@ object PolicyOps { penalizeLambdas: Boolean = true, noSyntaxNL: Boolean = false, ignore: Boolean = false, + exclude: TokenRanges = TokenRanges.empty, + excludeLt: FT => Policy.End.WithPos = Policy.End.OnLeft, + excludeRt: FT => Policy.End.WithPos = Policy.End.OnLeft, )(implicit fileLine: FileLine, style: ScalafmtConfig): Policy = Policy ? - (ignore || penalty <= 0) || new PenalizeAllNewlines( + (ignore || penalty <= 0) || + policyWithExclude(exclude, excludeLt, excludeRt)(new PenalizeAllNewlines( Policy.End < expire, penalty, penalizeLambdas, noSyntaxNL, - ) + )) } def penalizeNewlineByNesting(before: FT, after: FT)(implicit