Skip to content

Commit 73cd9a7

Browse files
authored
Fixed WRONG_NEWLINES rule to take into account maxCallsInOneLine (#1858)
### What's done: - Fixed bug related to case when the number of allowed extension function calls in one line did not match `maxCallsInOneLine` configuration. - Fixed several warning tests. - Added new warning test. Closes #1705
1 parent fd85628 commit 73cd9a7

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

Diff for: diktat-rules/src/main/kotlin/com/saveourtool/diktat/ruleset/rules/chapter3/files/NewlinesRule.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ class NewlinesRule(configRules: List<RulesConfig>) : DiktatRule(
158158
) {
159159
isDotQuaOrSafeAccessOrPostfixExpression(it) && it.elementType != POSTFIX_EXPRESSION
160160
}.reversed()
161-
if (listDot.size > 3) {
161+
if (listDot.size > configuration.maxCallsInOneLine) {
162162
val without = listDot.filterIndexed { index, it ->
163163
val nodeBeforeDotOrSafeAccess = it.findChildByType(DOT)?.treePrev ?: it.findChildByType(SAFE_ACCESS)?.treePrev
164164
val firstElem = it.firstChildNode

Diff for: diktat-rules/src/test/kotlin/com/saveourtool/diktat/ruleset/chapter3/files/NewlinesRuleWarnTest.kt

+30-3
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
2727
RulesConfig(WRONG_NEWLINES.name, true,
2828
mapOf("maxCallsInOneLine" to "1"))
2929
)
30+
private val rulesConfigListLong: List<RulesConfig> = listOf(
31+
RulesConfig(WRONG_NEWLINES.name, true,
32+
mapOf("maxCallsInOneLine" to "10"))
33+
)
3034
private val ruleId = "$DIKTAT_RULE_SET_ID:${NewlinesRule.NAME_ID}"
3135
private val dotQuaOrSafeAccessOrPostfixExpression = "${WRONG_NEWLINES.warnText()} wrong split long `dot qualified expression` or `safe access expression`"
3236
private val shouldBreakAfter = "${WRONG_NEWLINES.warnText()} should break a line after and not before"
@@ -682,7 +686,8 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
682686
| }
683687
|}
684688
""".trimMargin(),
685-
DiktatError(19, 20, ruleId, "${WRONG_NEWLINES.warnText()} should follow functional style at .", true),
689+
DiktatError(16, 9, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
690+
DiktatError(19, 20, ruleId, "$functionalStyleWarn .", true),
686691
rulesConfigList = rulesConfigListShort
687692
)
688693
}
@@ -829,9 +834,9 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
829834
|}
830835
""".trimMargin(),
831836
DiktatError(2, 4, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
832-
DiktatError(3, 22, ruleId, "${WRONG_NEWLINES.warnText()} should follow functional style at .", true),
837+
DiktatError(3, 22, ruleId, "$functionalStyleWarn .", true),
833838
DiktatError(13, 4, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
834-
DiktatError(13, 23, ruleId, "${WRONG_NEWLINES.warnText()} should follow functional style at .", true)
839+
DiktatError(13, 23, ruleId, "$functionalStyleWarn .", true)
835840
)
836841
}
837842

@@ -893,7 +898,9 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
893898
| .few()
894899
|}
895900
""".trimMargin(),
901+
DiktatError(2, 4, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
896902
DiktatError(4, 10, ruleId, "$functionalStyleWarn .", true),
903+
DiktatError(8, 4, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
897904
DiktatError(9, 11, ruleId, "$functionalStyleWarn .", true),
898905
DiktatError(9, 17, ruleId, "$functionalStyleWarn .", true),
899906
rulesConfigList = rulesConfigListShort
@@ -930,7 +937,9 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
930937
|}
931938
""".trimMargin(),
932939
DiktatError(2, 7, ruleId, "$functionalStyleWarn .", true),
940+
DiktatError(15, 4, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
933941
DiktatError(16, 10, ruleId, "$functionalStyleWarn .", true),
942+
DiktatError(21, 4, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
934943
DiktatError(21, 7, ruleId, "$functionalStyleWarn .", true),
935944
DiktatError(22, 10, ruleId, "$functionalStyleWarn .", true),
936945
rulesConfigList = rulesConfigListShort
@@ -1051,6 +1060,7 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
10511060
""".trimMargin(),
10521061
DiktatError(2, 14, ruleId, "$functionalStyleWarn ?:", true),
10531062
DiktatError(4, 8, ruleId, "$functionalStyleWarn ?:", true),
1063+
DiktatError(4, 11, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
10541064
DiktatError(4, 22, ruleId, "$functionalStyleWarn .", true),
10551065
rulesConfigList = rulesConfigListShort
10561066
)
@@ -1066,7 +1076,9 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
10661076
| a().b.c()!!
10671077
|}
10681078
""".trimMargin(),
1079+
DiktatError(2, 4, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
10691080
DiktatError(2, 11, ruleId, "$functionalStyleWarn .", true),
1081+
DiktatError(3, 4, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
10701082
DiktatError(3, 9, ruleId, "$functionalStyleWarn .", true),
10711083
rulesConfigList = rulesConfigListShort
10721084
)
@@ -1092,6 +1104,7 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
10921104
| .qwe()
10931105
|}
10941106
""".trimMargin(),
1107+
DiktatError(7, 11, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
10951108
DiktatError(7, 22, ruleId, "$functionalStyleWarn .", true),
10961109
DiktatError(9, 15, ruleId, "$functionalStyleWarn ?:", true),
10971110
DiktatError(10, 16, ruleId, "$functionalStyleWarn ?:", true),
@@ -1152,6 +1165,7 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
11521165
| if(a().b().c()) {}
11531166
|}
11541167
""".trimMargin(),
1168+
DiktatError(2, 7, ruleId, dotQuaOrSafeAccessOrPostfixExpression, true),
11551169
DiktatError(2, 14, ruleId, "${COMPLEX_EXPRESSION.warnText()} .", false),
11561170
DiktatError(2, 14, ruleId, "$functionalStyleWarn .", true),
11571171
rulesConfigList = rulesConfigListShort
@@ -1195,4 +1209,17 @@ class NewlinesRuleWarnTest : LintTestBase(::NewlinesRule) {
11951209
fileName = "build.gradle.kts"
11961210
)
11971211
}
1212+
1213+
@Test
1214+
@Tags(Tag(WarningNames.WRONG_NEWLINES), Tag(WarningNames.COMPLEX_EXPRESSION))
1215+
fun `shouldn't trigger on allowed many calls in one line`() {
1216+
lintMethod(
1217+
"""
1218+
|fun foo() {
1219+
| if(a().b().c().d().e()) {}
1220+
|}
1221+
""".trimMargin(),
1222+
rulesConfigList = rulesConfigListLong
1223+
)
1224+
}
11981225
}

0 commit comments

Comments
 (0)