From 71da8212892476ae0b5bed4804417e80be7157c4 Mon Sep 17 00:00:00 2001 From: paul-dingemans Date: Sat, 16 Sep 2023 15:22:08 +0200 Subject: [PATCH] Ignore anonymous function in rule `function-naming` Closes #2260 --- CHANGELOG.md | 1 + .../ruleset/standard/rules/FunctionNamingRule.kt | 12 +++++++++++- .../ruleset/standard/rules/FunctionNamingRuleTest.kt | 12 ++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e846156782..b5bd8530d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). ### Fixed * Fix ktlint cli parameter `--code-style` [#2238](https://github.com/pinterest/ktlint/pull/2238) +* Ignore anonymous function in rule `function-naming` [#2260](https://github.com/pinterest/ktlint/issue/2260) ### Changed diff --git a/ktlint-ruleset-standard/src/main/kotlin/com/pinterest/ktlint/ruleset/standard/rules/FunctionNamingRule.kt b/ktlint-ruleset-standard/src/main/kotlin/com/pinterest/ktlint/ruleset/standard/rules/FunctionNamingRule.kt index d98d244d74..a1ad1baab4 100644 --- a/ktlint-ruleset-standard/src/main/kotlin/com/pinterest/ktlint/ruleset/standard/rules/FunctionNamingRule.kt +++ b/ktlint-ruleset-standard/src/main/kotlin/com/pinterest/ktlint/ruleset/standard/rules/FunctionNamingRule.kt @@ -1,12 +1,15 @@ package com.pinterest.ktlint.ruleset.standard.rules import com.pinterest.ktlint.rule.engine.core.api.ElementType.FUN +import com.pinterest.ktlint.rule.engine.core.api.ElementType.FUN_KEYWORD import com.pinterest.ktlint.rule.engine.core.api.ElementType.IDENTIFIER import com.pinterest.ktlint.rule.engine.core.api.ElementType.IMPORT_DIRECTIVE +import com.pinterest.ktlint.rule.engine.core.api.ElementType.VALUE_PARAMETER_LIST import com.pinterest.ktlint.rule.engine.core.api.RuleId import com.pinterest.ktlint.rule.engine.core.api.SinceKtlint import com.pinterest.ktlint.rule.engine.core.api.SinceKtlint.Status.EXPERIMENTAL import com.pinterest.ktlint.rule.engine.core.api.SinceKtlint.Status.STABLE +import com.pinterest.ktlint.rule.engine.core.api.nextCodeSibling import com.pinterest.ktlint.ruleset.standard.StandardRule import com.pinterest.ktlint.ruleset.standard.rules.internal.regExIgnoringDiacriticsAndStrokesOnLetters import org.jetbrains.kotlin.com.intellij.lang.ASTNode @@ -43,7 +46,8 @@ public class FunctionNamingRule : StandardRule("function-naming") { ?.takeUnless { node.isFactoryMethod() || node.isTestMethod() || - node.hasValidFunctionName() + node.hasValidFunctionName() || + node.isAnonymousFunction() }?.let { val identifierOffset = node @@ -76,6 +80,12 @@ public class FunctionNamingRule : StandardRule("function-naming") { .orEmpty() .matches(VALID_FUNCTION_NAME_REGEXP) + private fun ASTNode.isAnonymousFunction() = + VALUE_PARAMETER_LIST == + findChildByType(FUN_KEYWORD) + ?.nextCodeSibling() + ?.elementType + private companion object { val VALID_FUNCTION_NAME_REGEXP = "[a-z][A-Za-z\\d]*".regExIgnoringDiacriticsAndStrokesOnLetters() val VALID_TEST_FUNCTION_NAME_REGEXP = "(`.*`)|([a-z][A-Za-z\\d_]*)".regExIgnoringDiacriticsAndStrokesOnLetters() diff --git a/ktlint-ruleset-standard/src/test/kotlin/com/pinterest/ktlint/ruleset/standard/rules/FunctionNamingRuleTest.kt b/ktlint-ruleset-standard/src/test/kotlin/com/pinterest/ktlint/ruleset/standard/rules/FunctionNamingRuleTest.kt index 6f8116f8b9..34ab7fb691 100644 --- a/ktlint-ruleset-standard/src/test/kotlin/com/pinterest/ktlint/ruleset/standard/rules/FunctionNamingRuleTest.kt +++ b/ktlint-ruleset-standard/src/test/kotlin/com/pinterest/ktlint/ruleset/standard/rules/FunctionNamingRuleTest.kt @@ -170,4 +170,16 @@ class FunctionNamingRuleTest { """.trimIndent() functionNamingRuleAssertThat(code).hasNoLintViolations() } + + @Test + fun `Issue 2260 - Given an anonymous function in a property assignment`() { + val code = + """ + val foo = + fun(): String { + return "foo" + } + """.trimIndent() + functionNamingRuleAssertThat(code).hasNoLintViolations() + } }