Simplify conditional checks to improve coverage (#4221)

This commit is contained in:
Matthew Haughton
2021-11-01 20:11:19 +11:00
committed by GitHub
parent 1721a59b19
commit 56471bf50a
4 changed files with 10 additions and 23 deletions

View File

@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.psi.KtLambdaExpression
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.resolve.BindingContext
/**
@@ -99,7 +99,5 @@ class NoNameShadowing(config: Config = Config.empty) : Rule(config) {
}
private fun KtLambdaExpression.hasParentImplicitParameterLambda(): Boolean =
getParentOfTypesAndPredicate(true, KtLambdaExpression::class.java) {
it.implicitParameter(bindingContext) != null
} != null
getStrictParentOfType<KtLambdaExpression>()?.implicitParameter(bindingContext) != null
}

View File

@@ -8,7 +8,6 @@ import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtExpression
@@ -39,13 +38,11 @@ class UnnecessaryTemporaryInstantiation(config: Config = Config.empty) : Rule(co
override fun visitCallExpression(expression: KtCallExpression) {
if (isPrimitiveWrapperType(expression.calleeExpression) &&
isToStringMethod(expression.nextSibling?.nextSibling)
expression.nextSibling?.nextSibling?.text == "toString()"
) {
report(CodeSmell(issue, Entity.from(expression), issue.description))
}
}
private fun isPrimitiveWrapperType(expression: KtExpression?) = types.contains(expression?.text)
private fun isToStringMethod(element: PsiElement?) = element?.text == "toString()"
}

View File

@@ -7,7 +7,6 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.KtContainerNodeForControlStructureBody
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.psi.KtIfExpression
@@ -55,13 +54,8 @@ class CollapsibleIfStatements(config: Config = Config.empty) : Rule(config) {
private fun isNotElseIfOrElse(expression: KtIfExpression) =
expression.`else` == null && expression.parent !is KtContainerNodeForControlStructureBody
private fun hasOneKtIfExpression(expression: KtIfExpression): Boolean {
val statement = expression.then?.getChildrenOfType<KtExpression>()?.singleOrNull()
return statement != null && isLoneIfExpression(statement)
}
private fun hasOneKtIfExpression(expression: KtIfExpression) =
expression.then?.getChildrenOfType<KtExpression>()?.singleOrNull().isLoneIfExpression()
private fun isLoneIfExpression(statement: PsiElement): Boolean {
val ifExpression = statement as? KtIfExpression
return ifExpression != null && ifExpression.`else` == null
}
private fun KtExpression?.isLoneIfExpression() = this is KtIfExpression && `else` == null
}

View File

@@ -161,8 +161,8 @@ class MagicNumber(config: Config = Config.empty) : Rule(config) {
else -> false
}
private fun parseAsDoubleOrNull(rawToken: String?): Double? = try {
rawToken?.let { parseAsDouble(it) }
private fun parseAsDoubleOrNull(rawToken: String): Double? = try {
parseAsDouble(rawToken)
} catch (e: NumberFormatException) {
null
}
@@ -170,10 +170,8 @@ class MagicNumber(config: Config = Config.empty) : Rule(config) {
private fun parseAsDouble(rawNumber: String): Double {
val normalizedText = normalizeForParsingAsDouble(rawNumber)
return when {
normalizedText.startsWith("0x") || normalizedText.startsWith("0X") ->
normalizedText.substring(2).toLong(HEX_RADIX).toDouble()
normalizedText.startsWith("0b") || normalizedText.startsWith("0B") ->
normalizedText.substring(2).toLong(BINARY_RADIX).toDouble()
normalizedText.startsWith("0x") -> normalizedText.substring(2).toLong(HEX_RADIX).toDouble()
normalizedText.startsWith("0b") -> normalizedText.substring(2).toLong(BINARY_RADIX).toDouble()
else -> normalizedText.toDouble()
}
}