diff --git a/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitorBase.kt b/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitorBase.kt index 8ae03ea6..733c23da 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/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 4837ca7c..85837123 100644 --- a/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt +++ b/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt @@ -1890,6 +1890,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( @@ -3744,6 +3759,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 = @@ -4346,7 +4375,7 @@ class FormatterKtTest { | | |class C {} - | + | | |class C {} | diff --git a/core/src/test/java/com/facebook/ktfmt/GoogleStyleFormatterKtTest.kt b/core/src/test/java/com/facebook/ktfmt/GoogleStyleFormatterKtTest.kt index 87bc26b0..f275a072 100644 --- a/core/src/test/java/com/facebook/ktfmt/GoogleStyleFormatterKtTest.kt +++ b/core/src/test/java/com/facebook/ktfmt/GoogleStyleFormatterKtTest.kt @@ -603,6 +603,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(