diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatWriter.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatWriter.scala index bd75d763b6..9fbe2270a6 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatWriter.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/internal/FormatWriter.scala @@ -161,10 +161,10 @@ class FormatWriter(formatOps: FormatOps) { case rb: T.RightBrace => // look for "foo { bar }" val ok = tok.meta.leftOwner match { case b: Term.Block => - checkApply(b) && RedundantBraces.canRewriteWithParens(b) && + checkApply(b) && RedundantBraces.canRewriteBlockWithParens(b) && b.parent.exists(_.tokens.last.start == rb.start) case f: Term.FunctionTerm => - checkApply(f) && RedundantBraces.canRewriteWithParens(f) + checkApply(f) && RedundantBraces.canRewriteFuncWithParens(f) case _ => false } if (ok) { diff --git a/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantBraces.scala b/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantBraces.scala index 7a069ac760..d434dc822a 100644 --- a/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantBraces.scala +++ b/scalafmt-core/shared/src/main/scala/org/scalafmt/rewrite/RedundantBraces.scala @@ -27,9 +27,12 @@ object RedundantBraces extends Rewrite with FormatTokensRewrite.RuleFactory { case _ => false } - def canRewriteWithParens(b: Term.Block): Boolean = - getBlockSingleStat(b).exists { - case f: Term.FunctionTerm => canRewriteWithParens(f) + def canRewriteBlockWithParens(b: Term.Block): Boolean = + getBlockSingleStat(b).exists(canRewriteStatWithParens) + + def canRewriteStatWithParens(t: Stat): Boolean = + t match { + case f: Term.FunctionTerm => canRewriteFuncWithParens(f) case _: Term.Assign => false // disallowed in 2.13 case _: Defn => false case _ => true @@ -38,12 +41,12 @@ object RedundantBraces extends Rewrite with FormatTokensRewrite.RuleFactory { /* guard for statements requiring a wrapper block * "foo { x => y; z }" can't become "foo(x => y; z)" */ @tailrec - def canRewriteWithParens( + def canRewriteFuncWithParens( f: Term.FunctionTerm, nested: Boolean = false ): Boolean = !needParensAroundParams(f) && (getTreeSingleStat(f.body) match { - case Some(t: Term.FunctionTerm) => canRewriteWithParens(t, true) + case Some(t: Term.FunctionTerm) => canRewriteFuncWithParens(t, true) case Some(_: Defn) => false case x => nested || x.isDefined })