From 3c0235fda1543a0054dc8b980e167b3193c25508 Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Sat, 11 Dec 2021 08:53:25 -0800 Subject: [PATCH 1/2] Add test with try-catch-finally and wrong braces --- .../src/test/resources/default/Try.stat | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/scalafmt-tests/src/test/resources/default/Try.stat b/scalafmt-tests/src/test/resources/default/Try.stat index 70671af308..b5fd91ee41 100644 --- a/scalafmt-tests/src/test/resources/default/Try.stat +++ b/scalafmt-tests/src/test/resources/default/Try.stat @@ -158,3 +158,40 @@ object a { } catch { case e => "very long statement, needs to split line very soon" }; x = 43 } +<<< try with non-block expr using braces +object a { + try Option.when(foo) { + bar + baz + }.getOrElse { + qux + } + catch foo(bar) { + baz + qux + } + finally foo(bar) { + baz + qux + } +} +>>> +object a { + try + Option + .when(foo) { + bar + baz + } + .getOrElse { + qux + } catch + foo(bar) { + baz + qux + } finally + foo(bar) { + baz + qux + } +} From 3d9310d752c0d138ee46ac50feae1f6e90ff17b2 Mon Sep 17 00:00:00 2001 From: Albert Meltzer <7529386+kitbellew@users.noreply.github.com> Date: Sat, 11 Dec 2021 08:57:37 -0800 Subject: [PATCH 2/2] Router: break before catch/finally on wrong brace --- .../src/main/scala/org/scalafmt/internal/Router.scala | 4 +++- scalafmt-tests/src/test/resources/default/Try.stat | 6 ++++-- 2 files changed, 7 insertions(+), 3 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 5c83da277e..74cce52fa8 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 @@ -2374,7 +2374,9 @@ class Router(formatOps: FormatOps) { case FormatToken(left, _: T.KwCatch | _: T.KwFinally, _) if style.newlines.alwaysBeforeElseAfterCurlyIf - || !left.is[T.RightBrace] => + || !left.is[T.RightBrace] || + leftOwner.ne(rightOwner) && + !leftOwner.parent.contains(rightOwner) => Seq( Split(NewlineT(formatToken.hasBlankLine), 0) ) diff --git a/scalafmt-tests/src/test/resources/default/Try.stat b/scalafmt-tests/src/test/resources/default/Try.stat index b5fd91ee41..e54080bdc9 100644 --- a/scalafmt-tests/src/test/resources/default/Try.stat +++ b/scalafmt-tests/src/test/resources/default/Try.stat @@ -185,11 +185,13 @@ object a { } .getOrElse { qux - } catch + } + catch foo(bar) { baz qux - } finally + } + finally foo(bar) { baz qux