Skip to content

Commit 9af1286

Browse files
Ignore properties starting with _ in backing-property-naming rule (#2753)
Name of an overridden property can only be changed by changing the name of the base property. Closes #2748
1 parent b2c993d commit 9af1286

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

ktlint-ruleset-standard/src/main/kotlin/com/pinterest/ktlint/ruleset/standard/rules/BackingPropertyNamingRule.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.pinterest.ktlint.rule.engine.core.api.AutocorrectDecision
44
import com.pinterest.ktlint.rule.engine.core.api.ElementType.FUN
55
import com.pinterest.ktlint.rule.engine.core.api.ElementType.IDENTIFIER
66
import com.pinterest.ktlint.rule.engine.core.api.ElementType.INTERNAL_KEYWORD
7+
import com.pinterest.ktlint.rule.engine.core.api.ElementType.OVERRIDE_KEYWORD
78
import com.pinterest.ktlint.rule.engine.core.api.ElementType.PRIVATE_KEYWORD
89
import com.pinterest.ktlint.rule.engine.core.api.ElementType.PROPERTY
910
import com.pinterest.ktlint.rule.engine.core.api.ElementType.PROTECTED_KEYWORD
@@ -53,7 +54,10 @@ public class BackingPropertyNamingRule :
5354
property
5455
.findChildByType(IDENTIFIER)
5556
?.takeIf { it.text.startsWith("_") }
56-
?.let { identifier ->
57+
?.takeUnless {
58+
// Do not report overridden properties as they can only be changed by changing the base property
59+
it.treeParent.hasModifier(OVERRIDE_KEYWORD)
60+
}?.let { identifier ->
5761
visitBackingProperty(identifier, emit)
5862
}
5963
}

ktlint-ruleset-standard/src/test/kotlin/com/pinterest/ktlint/ruleset/standard/rules/BackingPropertyNamingRuleTest.kt

+14
Original file line numberDiff line numberDiff line change
@@ -345,4 +345,18 @@ class BackingPropertyNamingRuleTest {
345345
""".trimIndent()
346346
backingPropertyNamingRuleAssertThat(code).hasNoLintViolations()
347347
}
348+
349+
@Test
350+
fun `Issue 2748 - Given an override property with name starting with '_' then do not report a violation`() {
351+
val code =
352+
"""
353+
// The property "__foo" in example below can be defined in an external dependency, which can not be changed. Even in case it is
354+
// a (internal) dependency that can be changed, the violation should only be reported at the base property, but on the overrides
355+
val fooBar =
356+
object : FooBar {
357+
override val __foo = "foo"
358+
}
359+
""".trimIndent()
360+
backingPropertyNamingRuleAssertThat(code).hasNoLintViolations()
361+
}
348362
}

0 commit comments

Comments
 (0)