Naming convention inspection: don't report for factory functions

#KT-20438 Fixed
This commit is contained in:
Toshiaki Kameyama
2020-01-16 10:08:13 +09:00
committed by Vladimir Dolzhenko
parent 4f4db68a61
commit d703284d01
2 changed files with 24 additions and 5 deletions
@@ -26,8 +26,10 @@ import org.intellij.lang.regexp.RegExpFileType
import org.jdom.Element import org.jdom.Element
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.core.packageMatchesDirectoryOrImplicit import org.jetbrains.kotlin.idea.core.packageMatchesDirectoryOrImplicit
import org.jetbrains.kotlin.idea.quickfix.RenameIdentifierFix import org.jetbrains.kotlin.idea.quickfix.RenameIdentifierFix
import org.jetbrains.kotlin.idea.refactoring.fqName.fqName
import org.jetbrains.kotlin.idea.refactoring.isInjectedFragment import org.jetbrains.kotlin.idea.refactoring.isInjectedFragment
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
@@ -100,10 +102,10 @@ class NamingConventionInspectionSettings(
} }
} }
fun verifyName(element: PsiNameIdentifierOwner, holder: ProblemsHolder) { fun verifyName(element: PsiNameIdentifierOwner, holder: ProblemsHolder, additionalCheck: () -> Boolean) {
val name = element.name val name = element.name
val nameIdentifier = element.nameIdentifier val nameIdentifier = element.nameIdentifier
if (name != null && nameIdentifier != null && nameRegex?.matches(name) == false) { if (name != null && nameIdentifier != null && nameRegex?.matches(name) == false && additionalCheck()) {
val message = getNameMismatchMessage(name) val message = getNameMismatchMessage(name)
holder.registerProblem( holder.registerProblem(
element.nameIdentifier!!, element.nameIdentifier!!,
@@ -162,8 +164,8 @@ sealed class NamingConventionInspection(
rules = *rules rules = *rules
) )
protected fun verifyName(element: PsiNameIdentifierOwner, holder: ProblemsHolder) { protected fun verifyName(element: PsiNameIdentifierOwner, holder: ProblemsHolder, additionalCheck: () -> Boolean = { true }) {
namingSettings.verifyName(element, holder) namingSettings.verifyName(element, holder, additionalCheck)
} }
protected fun getNameMismatchMessage(name: String): String { protected fun getNameMismatchMessage(name: String): String {
@@ -217,7 +219,15 @@ class FunctionNameInspection : NamingConventionInspection(
return@namedFunctionVisitor return@namedFunctionVisitor
} }
if (!TestUtils.isInTestSourceContent(function)) { if (!TestUtils.isInTestSourceContent(function)) {
verifyName(function, holder) verifyName(function, holder) {
val functionName = function.name
val typeReference = function.typeReference
if (typeReference != null) {
typeReference.text != functionName
} else {
function.resolveToDescriptorIfAny()?.returnType?.fqName?.shortName()?.asString() != functionName
}
}
} }
} }
} }
+9
View File
@@ -15,3 +15,12 @@ class C : I {
} }
fun Vector3d(): Int = 42 fun Vector3d(): Int = 42
interface D
fun D(): D = object : D {}
interface E
fun E() = object : E {}
typealias F = () -> String
fun F(): F = { "" }