Skip to content

Commit

Permalink
Ignore anonymous function in rule function-naming
Browse files Browse the repository at this point in the history
Closes #2260
  • Loading branch information
paul-dingemans committed Sep 16, 2023
1 parent a38fb6f commit 71da821
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
}

0 comments on commit 71da821

Please sign in to comment.