From b17e505061c95b4d929f43b0be2f8a94fe099fc1 Mon Sep 17 00:00:00 2001 From: nickreid Date: Tue, 8 Feb 2022 12:30:58 -0800 Subject: [PATCH] Account for semicolons on top-level statements. (#275) Summary: Before this, such semicolons caused a crash because OpBuilder noticed they were skipped in the token stream. Pull Request resolved: https://github.com/facebookincubator/ktfmt/pull/275 Reviewed By: hick209 Differential Revision: D34083427 Pulled By: cgrushko fbshipit-source-id: 2bff6471ecda58965ae2280895ea6bf9c6c78730 --- .../ktfmt/format/KotlinInputAstVisitor.kt | 1 + .../facebook/ktfmt/format/FormatterTest.kt | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/core/src/main/java/com/facebook/ktfmt/format/KotlinInputAstVisitor.kt b/core/src/main/java/com/facebook/ktfmt/format/KotlinInputAstVisitor.kt index ee30e888..f244a669 100644 --- a/core/src/main/java/com/facebook/ktfmt/format/KotlinInputAstVisitor.kt +++ b/core/src/main/java/com/facebook/ktfmt/format/KotlinInputAstVisitor.kt @@ -2293,6 +2293,7 @@ class KotlinInputAstVisitor( builder.blankLineWanted(OpsBuilder.BlankLineWanted.YES) } visit(child) + builder.guessToken(";") lastChildHadBlankLineBefore = childGetsBlankLineBefore first = false } diff --git a/core/src/test/java/com/facebook/ktfmt/format/FormatterTest.kt b/core/src/test/java/com/facebook/ktfmt/format/FormatterTest.kt index 281dcdcb..e49b8d1a 100644 --- a/core/src/test/java/com/facebook/ktfmt/format/FormatterTest.kt +++ b/core/src/test/java/com/facebook/ktfmt/format/FormatterTest.kt @@ -2928,6 +2928,31 @@ class FormatterTest { |} |""".trimMargin()) + @Test + fun `don't crash on top level statements with semicolons`() { + val code = + """ + |val x = { 0 }; + | + |foo({ 0 }); + | + |foo { 0 }; + | + |val fill = 0; + |""".trimMargin() + val expected = + """ + |val x = { 0 } + | + |foo({ 0 }) + | + |foo { 0 } + | + |val fill = 0 + |""".trimMargin() + assertThatFormatting(code).isEqualTo(expected) + } + @Test fun `preserve semicolons in enums`() { val code =