diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/files/IndentationRule.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/files/IndentationRule.kt index ff8b059edc..d036844784 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/files/IndentationRule.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/chapter3/files/IndentationRule.kt @@ -8,10 +8,7 @@ import org.cqfn.diktat.common.config.rules.RulesConfig import org.cqfn.diktat.common.config.rules.getRuleConfig import org.cqfn.diktat.ruleset.constants.Warnings.WRONG_INDENTATION import org.cqfn.diktat.ruleset.rules.DiktatRule -import org.cqfn.diktat.ruleset.utils.getAllChildrenWithType -import org.cqfn.diktat.ruleset.utils.getAllLeafsWithSpecificType -import org.cqfn.diktat.ruleset.utils.getFilePath -import org.cqfn.diktat.ruleset.utils.indentBy +import org.cqfn.diktat.ruleset.utils.* import org.cqfn.diktat.ruleset.utils.indentation.ArrowInWhenChecker import org.cqfn.diktat.ruleset.utils.indentation.AssignmentOperatorChecker import org.cqfn.diktat.ruleset.utils.indentation.ConditionalsAndLoopsWithoutBracesChecker @@ -23,7 +20,6 @@ import org.cqfn.diktat.ruleset.utils.indentation.IndentationConfig import org.cqfn.diktat.ruleset.utils.indentation.KdocIndentationChecker import org.cqfn.diktat.ruleset.utils.indentation.SuperTypeListChecker import org.cqfn.diktat.ruleset.utils.indentation.ValueParameterListChecker -import org.cqfn.diktat.ruleset.utils.leaveOnlyOneNewLine import com.pinterest.ktlint.core.ast.ElementType.CALL_EXPRESSION import com.pinterest.ktlint.core.ast.ElementType.DOT_QUALIFIED_EXPRESSION @@ -72,6 +68,7 @@ import kotlin.math.abs * Additionally, a set of CustomIndentationChecker objects checks all WHITE_SPACE node if they are exceptions from general rules. * @see CustomIndentationChecker */ +@Suppress("LargeClass") class IndentationRule(configRules: List) : DiktatRule( "indentation", configRules, @@ -136,7 +133,7 @@ class IndentationRule(configRules: List) : DiktatRule( */ private fun checkNewlineAtEnd(node: ASTNode) { if (configuration.newlineAtEnd) { - val lastChild = node.lastChildNode + val lastChild = generateSequence(node) { it.lastChildNode }.last() val numBlankLinesAfter = lastChild.text.count { it == '\n' } if (lastChild.elementType != WHITE_SPACE || numBlankLinesAfter != 1) { val warnText = if (lastChild.elementType != WHITE_SPACE || numBlankLinesAfter == 0) "no newline" else "too many blank lines" diff --git a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter3/spaces/IndentationRuleWarnTest.kt b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter3/spaces/IndentationRuleWarnTest.kt index d73159b3ca..2d1690d0c5 100644 --- a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter3/spaces/IndentationRuleWarnTest.kt +++ b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter3/spaces/IndentationRuleWarnTest.kt @@ -11,6 +11,7 @@ import generated.WarningNames import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Suppress("LargeClass") class IndentationRuleWarnTest : LintTestBase(::IndentationRule) { private val ruleId = "$DIKTAT_RULE_SET_ID:indentation" private val rulesConfigList = listOf( @@ -631,5 +632,29 @@ class IndentationRuleWarnTest : LintTestBase(::IndentationRule) { ) } + @Test + @Tag(WarningNames.WRONG_INDENTATION) + fun `check script`() { + lintMethod( + """ + |val q = 1 + | + """.trimMargin(), + fileName = "src/main/kotlin/org/cqfn/diktat/Example.kts" + ) + } + + @Test + @Tag(WarningNames.WRONG_INDENTATION) + fun `check gradle script`() { + lintMethod( + """ + |projectName = "diKTat" + | + """.trimMargin(), + fileName = "src/main/kotlin/org/cqfn/diktat/build.gradle.kts" + ) + } + private fun warnText(expected: Int, actual: Int) = "${WRONG_INDENTATION.warnText()} expected $expected but was $actual" }