From a9330fc66d5c6ee6d541ab8cdab2d63111ec31a9 Mon Sep 17 00:00:00 2001 From: Beth Cutler Date: Thu, 27 May 2021 12:08:55 -0700 Subject: [PATCH 1/2] Fix for formatting on tagged code samples in KDoc. --- .../com/facebook/ktfmt/kdoc/KDocFormatter.kt | 2 +- .../java/com/facebook/ktfmt/FormatterKtTest.kt | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/facebook/ktfmt/kdoc/KDocFormatter.kt b/core/src/main/java/com/facebook/ktfmt/kdoc/KDocFormatter.kt index 323a70ec..b27c4ab2 100644 --- a/core/src/main/java/com/facebook/ktfmt/kdoc/KDocFormatter.kt +++ b/core/src/main/java/com/facebook/ktfmt/kdoc/KDocFormatter.kt @@ -114,7 +114,7 @@ object KDocFormatter { // END_KDOC properly. We want to recover in such cases if (word == "*/") { tokens.add(Token(END_KDOC, word)) - } else if (word == "```") { + } else if (word.startsWith("```")) { tokens.add(Token(CODE_BLOCK_MARKER, word)) } else { tokens.add(Token(LITERAL, word)) diff --git a/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt b/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt index 93a6be89..3e8e1293 100644 --- a/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt +++ b/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt @@ -3716,6 +3716,20 @@ class FormatterKtTest { |class MyClass {} |""".trimMargin()) + @Test + fun `handle KDoc with tagged code examples`() = + assertFormatted( + """ + |/** + | * ```kotlin + | * fun main(args: Array) { + | * println("Hello World!") + | * } + | * ``` + | */ + |class MyClass {} + |""".trimMargin()) + @Test fun `handle stray code markers in lines and produce stable output`() { val code = @@ -4318,7 +4332,7 @@ class FormatterKtTest { | | |class C {} - | + | | |class C {} | From be3c17fb48a9e6f18bdecfc600e837da3af151fe Mon Sep 17 00:00:00 2001 From: Beth Cutler Date: Thu, 27 May 2021 12:27:01 -0700 Subject: [PATCH 2/2] Correct indentation for delegated constructors with no parameters --- .../facebook/ktfmt/KotlinInputAstVisitorBase.kt | 3 ++- .../java/com/facebook/ktfmt/FormatterKtTest.kt | 15 +++++++++++++++ .../facebook/ktfmt/GoogleStyleFormatterKtTest.kt | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitorBase.kt b/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitorBase.kt index 20456d1a..3db86a41 100644 --- a/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitorBase.kt +++ b/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitorBase.kt @@ -330,10 +330,11 @@ open class KotlinInputAstVisitorBase( builder.token(":") if (parameterList?.parameters.isNullOrEmpty()) { builder.breakOp(Doc.FillMode.INDEPENDENT, " ", expressionBreakIndent) + builder.block(expressionBreakIndent) { typeOrDelegationCall.accept(this) } } else { builder.space() + builder.block(expressionBreakNegativeIndent) { typeOrDelegationCall.accept(this) } } - builder.block(expressionBreakNegativeIndent) { typeOrDelegationCall.accept(this) } } } } diff --git a/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt b/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt index 3e8e1293..c9f19c08 100644 --- a/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt +++ b/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt @@ -1862,6 +1862,21 @@ class FormatterKtTest { |""".trimMargin(), deduceMaxWidth = true) + @Test + fun `a secondary constructor with no arguments passed to delegate`() = + assertFormatted( + """ + |-------------------------------------------------- + |data class Foo { + | constructor() : + | this( + | Foo.createSpeciallyDesignedParameter(), + | Foo.createSpeciallyDesignedParameter(), + | ) + |} + |""".trimMargin(), + deduceMaxWidth = true) + @Test fun `secondary constructor with param list that fits in one line, with delegate`() = assertFormatted( diff --git a/core/src/test/java/com/facebook/ktfmt/GoogleStyleFormatterKtTest.kt b/core/src/test/java/com/facebook/ktfmt/GoogleStyleFormatterKtTest.kt index a9961eb0..07c54d36 100644 --- a/core/src/test/java/com/facebook/ktfmt/GoogleStyleFormatterKtTest.kt +++ b/core/src/test/java/com/facebook/ktfmt/GoogleStyleFormatterKtTest.kt @@ -573,6 +573,22 @@ class GoogleStyleFormatterKtTest { formattingOptions = GOOGLE_FORMAT, deduceMaxWidth = true) + @Test + fun `a secondary constructor with no arguments passed to delegate`() = + assertFormatted( + """ + |-------------------------------------------------- + |data class Foo { + | constructor() : + | this( + | Foo.createSpeciallyDesignedParameter(), + | Foo.createSpeciallyDesignedParameter(), + | ) + |} + |""".trimMargin(), + formattingOptions = GOOGLE_FORMAT, + deduceMaxWidth = true) + @Test fun `handle trailing commas (function calls)`() = assertFormatted(