[kotlin] Do not report a local variable named as _ as a naming violation

#KTIJ-34207

GitOrigin-RevId: 3f11c675bc3b065ff064ad9bc83fde746747e955
This commit is contained in:
Vladimir Dolzhenko
2025-06-04 17:13:32 +02:00
committed by intellij-monorepo-bot
parent d81f522850
commit bdf54c4ac9
2 changed files with 14 additions and 9 deletions

View File

@@ -15,7 +15,10 @@ import com.intellij.codeInspection.reference.RefPackage
import com.intellij.lang.injection.InjectedLanguageManager
import com.intellij.openapi.util.NlsSafe
import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.*
import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiElementVisitor
import com.intellij.psi.PsiNameIdentifierOwner
import com.siyeh.ig.BaseGlobalInspection
import com.siyeh.ig.psiutils.TestUtils
import org.intellij.lang.annotations.Language
@@ -23,6 +26,7 @@ import org.jdom.Element
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.AbstractKotlinInspection
import org.jetbrains.kotlin.idea.codeinsights.impl.base.isExplicitlyIgnoredByName
import org.jetbrains.kotlin.idea.core.packageMatchesDirectoryOrImplicit
import org.jetbrains.kotlin.idea.quickfix.RenameIdentifierFix
import org.jetbrains.kotlin.lexer.KtTokens
@@ -129,7 +133,7 @@ class NamingConventionInspectionSettings(
return findRuleMessage(name, rules) ?: getDefaultErrorMessage()
}
fun getDefaultErrorMessage() = KotlinBundle.message("doesn.t.match.regex.0", namePattern)
fun getDefaultErrorMessage(): String = KotlinBundle.message("doesn.t.match.regex.0", namePattern)
fun getOptionsPane(): OptPane = pane(string("namePattern", KotlinBundle.message("text.pattern"), 30, RegexValidator()))
@@ -258,9 +262,10 @@ abstract class PropertyNameInspectionBase protected constructor(
protected enum class PropertyKind { NORMAL, OBJECT_PRIVATE, PRIVATE, OBJECT_OR_TOP_LEVEL, CONST, LOCAL }
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) = object : KtVisitorVoid() {
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): KtVisitorVoid = object : KtVisitorVoid() {
override fun visitProperty(property: KtProperty) {
if (property.hasModifier(KtTokens.OVERRIDE_KEYWORD)) return
if (property.isExplicitlyIgnoredByName()) return
if (property.getKind() == kind) {
verifyName(property, holder, additionalCheck = { additionalPropertyCheck(property) })
}
@@ -268,14 +273,14 @@ abstract class PropertyNameInspectionBase protected constructor(
override fun visitParameter(parameter: KtParameter) {
if (parameter.hasModifier(KtTokens.OVERRIDE_KEYWORD)) return
if (parameter.isSingleUnderscore) return
if (parameter.isExplicitlyIgnoredByName()) return
if (parameter.getKind() == kind) {
verifyName(parameter, holder)
}
}
override fun visitDestructuringDeclarationEntry(multiDeclarationEntry: KtDestructuringDeclarationEntry) {
if (multiDeclarationEntry.isSingleUnderscore) return
if (multiDeclarationEntry.isExplicitlyIgnoredByName()) return
if (kind == PropertyKind.LOCAL) {
verifyName(multiDeclarationEntry, holder)
}
@@ -284,9 +289,6 @@ abstract class PropertyNameInspectionBase protected constructor(
protected open fun additionalPropertyCheck(property: KtNamedDeclaration): Boolean = true
private val PsiNamedElement.isSingleUnderscore: Boolean
get() = name == "_"
private fun KtProperty.getKind(): PropertyKind {
val private = visibilityModifierType() == KtTokens.PRIVATE_KEYWORD
return when {

View File

@@ -36,4 +36,7 @@ fun lambda() {
fun anonymousFun() {
"".let(fun(_: String) {
})
}
val _ = someValueProvider()
}
fun someValueProvider() = 42