diff --git a/docs/configuration.md b/docs/configuration.md index f146c6d958..53b48b8c02 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -607,6 +607,7 @@ indent.fewerBraces > In Scala 3.3.0, only `never` provides compiler-compatible code. > Other options will work in 3.3.1-RC1 and later > (see [Parser section](https://github.com/lampepfl/dotty/releases/tag/3.3.1-RC1)). +> Also, `never` is implicitly forced if indentation width is less than 2. ```scala mdoc:scalafmt runner.dialect = Scala3 diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/config/Indents.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/config/Indents.scala index 8e391fcdc4..9ea58beb71 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/config/Indents.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/config/Indents.scala @@ -32,7 +32,8 @@ case class Indents( private[config] val ctorSite: Option[Int] = None, extraBeforeOpenParenDefnSite: Int = 0, relativeToLhsLastLine: Seq[Indents.RelativeToLhs] = Nil, - fewerBraces: Indents.FewerBraces = Indents.FewerBraces.never, + private[config] val fewerBraces: Indents.FewerBraces = + Indents.FewerBraces.never, @annotation.ExtraName("deriveSite") extendSite: Int = 4, withSiteRelativeToExtends: Int = 0, diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/config/ScalafmtConfig.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/config/ScalafmtConfig.scala index 76db48e372..75eeb491db 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/config/ScalafmtConfig.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/config/ScalafmtConfig.scala @@ -266,6 +266,10 @@ case class ScalafmtConfig( def formatInfix(tree: => Tree): Boolean = breakAfterInfix(tree) ne Newlines.AfterInfix.keep + + def getFewerBraces(): Indents.FewerBraces = + if (indent.getSignificant < 2) Indents.FewerBraces.never + else indent.fewerBraces } object ScalafmtConfig { 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 a30e65e419..ef7da3a143 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 @@ -2103,7 +2103,7 @@ class FormatOps( case x: Member.Apply => isSelect(x) case x => x.is[Term.Select] } - val ok = (style.indent.fewerBraces match { + val ok = (style.getFewerBraces() match { case Indents.FewerBraces.never => true case Indents.FewerBraces.always => false case Indents.FewerBraces.beforeSelect => 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 c58902c6f4..1011ae78ea 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 @@ -1772,12 +1772,12 @@ class Router(formatOps: FormatOps) { def getNlMod = { val endSelect = nextDotIfSig.fold { nextSelect.fold { - val ko = style.indent.fewerBraces == + val ko = style.getFewerBraces() == Indents.FewerBraces.always && checkFewerBraces(expireTree) if (ko) None else Some(expire) } { ns => Some(getLastNonTrivialToken(ns.qual)) } } { nd => - val ok = style.indent.fewerBraces == Indents.FewerBraces.never + val ok = style.getFewerBraces() == Indents.FewerBraces.never if (ok) Some(nd.left) else None } val altIndent = endSelect.map(Indent(-indentLen, _, After)) @@ -1909,7 +1909,7 @@ class Router(formatOps: FormatOps) { } // trigger indent only on the first newline - val fbIndent = style.indent.fewerBraces != Indents.FewerBraces.never + val fbIndent = style.getFewerBraces() != Indents.FewerBraces.never val noIndent = !fbIndent && checkFewerBraces(thisSelect.qual) val nlIndent = if (noIndent) Indent.Empty else Indent(indentLen, expire, After) @@ -1921,7 +1921,7 @@ class Router(formatOps: FormatOps) { baseSplits.map(_.withIndent(nlIndent).andFirstPolicyOpt(nlPolicy)) else { val spcIndent = nextDotIfSig.fold { - val ok = style.indent.fewerBraces == Indents.FewerBraces.always && + val ok = style.getFewerBraces() == Indents.FewerBraces.always && nextSelect.isEmpty && checkFewerBraces(expireTree) if (ok) nlIndent else Indent.empty } { x =>