From 325134d6ed32d048f25f2098adbe00c4003fc5c5 Mon Sep 17 00:00:00 2001 From: Pleshkova Daria Date: Thu, 7 Dec 2023 16:34:59 +0300 Subject: [PATCH] Closes #1773 --- .../rules/chapter1/IdentifierNaming.kt | 35 --------- .../ruleset/chapter2/KdocMethodsTest.kt | 75 +++++++++++++++++++ 2 files changed, 75 insertions(+), 35 deletions(-) diff --git a/diktat-rules/src/main/kotlin/com/saveourtool/diktat/ruleset/rules/chapter1/IdentifierNaming.kt b/diktat-rules/src/main/kotlin/com/saveourtool/diktat/ruleset/rules/chapter1/IdentifierNaming.kt index b0ba1624b7..24fe0cfcba 100644 --- a/diktat-rules/src/main/kotlin/com/saveourtool/diktat/ruleset/rules/chapter1/IdentifierNaming.kt +++ b/diktat-rules/src/main/kotlin/com/saveourtool/diktat/ruleset/rules/chapter1/IdentifierNaming.kt @@ -30,15 +30,11 @@ import org.jetbrains.kotlin.KtNodeTypes.CLASS import org.jetbrains.kotlin.KtNodeTypes.DESTRUCTURING_DECLARATION import org.jetbrains.kotlin.KtNodeTypes.DESTRUCTURING_DECLARATION_ENTRY import org.jetbrains.kotlin.KtNodeTypes.FUNCTION_TYPE -import org.jetbrains.kotlin.KtNodeTypes.MODIFIER_LIST -import org.jetbrains.kotlin.KtNodeTypes.NULLABLE_TYPE import org.jetbrains.kotlin.KtNodeTypes.OBJECT_DECLARATION import org.jetbrains.kotlin.KtNodeTypes.PROPERTY -import org.jetbrains.kotlin.KtNodeTypes.PROPERTY_ACCESSOR import org.jetbrains.kotlin.KtNodeTypes.REFERENCE_EXPRESSION import org.jetbrains.kotlin.KtNodeTypes.TYPE_PARAMETER import org.jetbrains.kotlin.KtNodeTypes.TYPE_REFERENCE -import org.jetbrains.kotlin.KtNodeTypes.USER_TYPE import org.jetbrains.kotlin.KtNodeTypes.VALUE_PARAMETER_LIST import org.jetbrains.kotlin.com.intellij.lang.ASTNode import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.LeafPsiElement @@ -48,7 +44,6 @@ import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens.CATCH_KEYWORD import org.jetbrains.kotlin.lexer.KtTokens.IDENTIFIER -import org.jetbrains.kotlin.lexer.KtTokens.PRIVATE_KEYWORD import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtPrimaryConstructor import org.jetbrains.kotlin.psi.KtProperty @@ -145,36 +140,6 @@ class IdentifierNaming(configRules: List) : DiktatRule( return false } - /** - * method checks that identifier is correct backing field - */ - private fun ASTNode.isCorrectBackingField(variableName: ASTNode): Boolean { - val propertyNodes = this.treeParent.getAllChildrenWithType(KtNodeTypes.PROPERTY) - val variableNameCut = variableName.text.drop(1) - // check that backing field name is correct - - if (variableName.text.startsWith("_") && variableNameCut.isLowerCamelCase()) { - val matchingNode = propertyNodes.find { propertyNode -> - val nodeType = this.getFirstChildWithType(TYPE_REFERENCE) - val propertyType = propertyNode.getFirstChildWithType(TYPE_REFERENCE) - // check that property and backing field has same type - val sameType = propertyType?.text == nodeType?.text - // check that property USER_TYPE is same as backing field NULLABLE_TYPE - val nodeNullableType = nodeType?.getFirstChildWithType(NULLABLE_TYPE) - val sameTypeWithNullable = propertyType?.getFirstChildWithType(USER_TYPE)?.text == - nodeNullableType?.getFirstChildWithType(USER_TYPE)?.text - val matchingNames = propertyNode.getFirstChildWithType(IDENTIFIER)?.text == variableNameCut - val isPrivate = this.getFirstChildWithType(MODIFIER_LIST)?.getFirstChildWithType(PRIVATE_KEYWORD) != null - - matchingNames && (sameType || sameTypeWithNullable) && isPrivate && - this.getFirstChildWithType(PROPERTY_ACCESSOR) == null && - propertyNode.getFirstChildWithType(PROPERTY_ACCESSOR) != null - } - return matchingNode?.let { true } ?: false - } - return false - } - /** * all checks for case and naming for vals/vars/constants */ diff --git a/diktat-rules/src/test/kotlin/com/saveourtool/diktat/ruleset/chapter2/KdocMethodsTest.kt b/diktat-rules/src/test/kotlin/com/saveourtool/diktat/ruleset/chapter2/KdocMethodsTest.kt index 53d9c0b5cd..94c439e65d 100644 --- a/diktat-rules/src/test/kotlin/com/saveourtool/diktat/ruleset/chapter2/KdocMethodsTest.kt +++ b/diktat-rules/src/test/kotlin/com/saveourtool/diktat/ruleset/chapter2/KdocMethodsTest.kt @@ -449,4 +449,79 @@ class KdocMethodsTest : LintTestBase(::KdocMethods) { ) } + @Test + @Tag(WarningNames.MISSING_KDOC_ON_FUNCTION) + fun `KDoc shouldn't trigger on functions with KDoc`() { + lintMethod( + """ + |/** + | * prints "Hello" and "Bye" + | */ + |fun printHelloAndBye() { + | fun printHello() { + | print("Hello") + | } + | printHello() + | val ab = 5 + | ab?.let { + | fun printBye() { + | print("Bye") + | } + | printBye() + | } + |} + """.trimMargin(), + ) + } + + @Test + @Tag(WarningNames.MISSING_KDOC_ON_FUNCTION) + fun `KDoc shouldn't trigger on nested local functions`() { + lintMethod( + """ + |fun printHelloAndBye() { + | fun printHello() { + | print("Hello") + | fun printBye() { + | print("Bye") + | } + | fun printDots() { + | print("...") + | } + | printBye() + | printDots() + | } + | printHello() + |} + """.trimMargin(), + DiktatError(1, 1, ruleId, "${MISSING_KDOC_ON_FUNCTION.warnText()} printHelloAndBye", false), + ) + } + + @Test + @Tag(WarningNames.MISSING_KDOC_ON_FUNCTION) + fun `KDoc shouldn't trigger on local functions with KDoc`() { + lintMethod( + """ + |fun printHelloAndBye() { + | fun printHello() { + | print("Hello") + | } + | printHello() + | val ab = 5 + | ab?.let { + | /** + | * prints "Bye" + | */ + | fun printBye() { + | print("Bye") + | } + | printBye() + | } + |} + """.trimMargin(), + DiktatError(1, 1, ruleId, "${MISSING_KDOC_ON_FUNCTION.warnText()} printHelloAndBye", false), + ) + } + }