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 a8d9eed3b4..b56d4d4a57 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 @@ -337,11 +337,14 @@ class FormatOps( term: Term.If, ): Option[(FormatToken, Option[T.KwElse])] = getHeadOpt(term.elsep) .map { ftElsep => - val beforeElsep = prevNonCommentBefore(ftElsep) - val elsOpt = beforeElsep.left match { - case els: T.KwElse - if initStyle.newlines.alwaysBeforeElseAfterCurlyIf || - !prev(beforeElsep).left.is[T.RightBrace] => Some(els) + val elsOpt = prevNonCommentBefore(ftElsep) match { + case ft @ FormatToken(els: T.KwElse, _, _) => + val ok = initStyle.newlines.alwaysBeforeElseAfterCurlyIf || ! { + val pft = prev(ft) + pft.leftOwner.is[Term.Block] && pft.left.is[T.RightBrace] && + !prevNonCommentSameLineBefore(pft).left.is[T.LeftBrace] + } + if (ok) Some(els) else None case _ => None } (ftElsep, elsOpt) diff --git a/scalafmt-tests/shared/src/test/resources/default/String.stat b/scalafmt-tests/shared/src/test/resources/default/String.stat index e7673a52dd..6778df7923 100644 --- a/scalafmt-tests/shared/src/test/resources/default/String.stat +++ b/scalafmt-tests/shared/src/test/resources/default/String.stat @@ -333,7 +333,8 @@ object a { object a { def b = { try { - if (false) {} else { + if (false) {} + else { info("Uber JAR disabled, but current working directory does not look " + s"like an engine project directory. Please delete lib/${core.getName} manually.") } diff --git a/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces2.stat b/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces2.stat index 1ced40bd54..2bb9a0076e 100644 --- a/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces2.stat +++ b/scalafmt-tests/shared/src/test/resources/rewrite/RedundantBraces2.stat @@ -291,7 +291,8 @@ object a { if ( template.isEmpty || hasModifiers || definition .exists(it => it.contains(CASE) && !it.contains(OBJECT)) - ) {} else { + ) {} + else { if ( sb.length >= 2 && sb.substring( sb.length - 2, @@ -317,7 +318,8 @@ object a { if ( template.isEmpty || hasModifiers || definition .exists(it => it.contains(CASE) && !it.contains(OBJECT)) - ) {} else if ( + ) {} + else if ( sb.length >= 2 && sb.substring( sb.length - 2, sb.length() diff --git a/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala b/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala index 02bff7815e..48639c4a89 100644 --- a/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala +++ b/scalafmt-tests/shared/src/test/scala/org/scalafmt/FormatTests.scala @@ -138,7 +138,7 @@ class FormatTests extends FunSuite with CanRunTests with FormatAssertions { val explored = Debug.explored.get() logger.debug(s"Total explored: $explored") if (!onlyUnit && !onlyManual) - assertEquals(explored, 1484614, "total explored") + assertEquals(explored, 1484618, "total explored") val results = debugResults.result() // TODO(olafur) don't block printing out test results. // I don't want to deal with scalaz's Tasks :'(