Allow empty first line in function that returns anonymous object (#655)
diff --git a/ktlint-ruleset-experimental/src/main/kotlin/com/pinterest/ktlint/ruleset/experimental/NoEmptyFirstLineInMethodBlockRule.kt b/ktlint-ruleset-experimental/src/main/kotlin/com/pinterest/ktlint/ruleset/experimental/NoEmptyFirstLineInMethodBlockRule.kt index 83274b8..b0d5d41 100644 --- a/ktlint-ruleset-experimental/src/main/kotlin/com/pinterest/ktlint/ruleset/experimental/NoEmptyFirstLineInMethodBlockRule.kt +++ b/ktlint-ruleset-experimental/src/main/kotlin/com/pinterest/ktlint/ruleset/experimental/NoEmptyFirstLineInMethodBlockRule.kt
@@ -2,6 +2,7 @@ import com.pinterest.ktlint.core.Rule import com.pinterest.ktlint.core.ast.ElementType +import com.pinterest.ktlint.core.ast.ElementType.CLASS_BODY import com.pinterest.ktlint.core.ast.ElementType.FUN import com.pinterest.ktlint.core.ast.isPartOf import com.pinterest.ktlint.core.ast.prevLeaf @@ -17,7 +18,8 @@ emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> Unit ) { if (node is PsiWhiteSpace && node.textContains('\n') && - node.prevLeaf()?.elementType == ElementType.LBRACE && node.isPartOf(FUN) + node.prevLeaf()?.elementType == ElementType.LBRACE && node.isPartOf(FUN) && + node.treeParent.elementType != CLASS_BODY // fun fn() = object : Builder {\n\n fun stuff() = Unit } ) { val split = node.getText().split("\n") if (split.size > 2) {
diff --git a/ktlint-ruleset-experimental/src/test/kotlin/com/pinterest/ktlint/ruleset/experimental/NoEmptyFirstLineInMethodBlockRuleTest.kt b/ktlint-ruleset-experimental/src/test/kotlin/com/pinterest/ktlint/ruleset/experimental/NoEmptyFirstLineInMethodBlockRuleTest.kt index 5e814a2..9c46f40 100644 --- a/ktlint-ruleset-experimental/src/test/kotlin/com/pinterest/ktlint/ruleset/experimental/NoEmptyFirstLineInMethodBlockRuleTest.kt +++ b/ktlint-ruleset-experimental/src/test/kotlin/com/pinterest/ktlint/ruleset/experimental/NoEmptyFirstLineInMethodBlockRuleTest.kt
@@ -140,4 +140,32 @@ ) assertThat(NoEmptyFirstLineInMethodBlockRule().format(unformattedFunction)).isEqualTo(formattedFunction) } + + @Test + fun `lint empty first line may be placed in function inside anonymous object`() { + val code = + """ + fun fooBuilder() = object : Foo { + + override fun foo() { + TODO() + } + } + """.trimIndent() + assertThat(NoEmptyFirstLineInMethodBlockRule().lint(code)).isEmpty() + } + + @Test + fun `format empty first line may be placed in function inside anonymous object`() { + val code = + """ + fun fooBuilder() = object : Foo { + + override fun foo() { + TODO() + } + } + """.trimIndent() + assertThat(NoEmptyFirstLineInMethodBlockRule().format(code)).isEqualTo(code) + } }