detekt.yml
build:
maxIssues: 0
excludeCorrectable: false
weights:
# complexity: 2
# LongParameterList: 1
# style: 1
# comments: 1
config:
validation: true
warningsAsErrors: false
# when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]'
excludes: ""
processors:
active: true
exclude:
- "DetektProgressListener"
# - 'KtFileCountProcessor'
# - 'PackageCountProcessor'
# - 'ClassCountProcessor'
# - 'FunctionCountProcessor'
# - 'PropertyCountProcessor'
# - 'ProjectComplexityProcessor'
# - 'ProjectCognitiveComplexityProcessor'
# - 'ProjectLLOCProcessor'
# - 'ProjectCLOCProcessor'
# - 'ProjectLOCProcessor'
# - 'ProjectSLOCProcessor'
# - 'LicenseHeaderLoaderExtension'
console-reports:
active: true
exclude:
- "ProjectStatisticsReport"
- "ComplexityReport"
- "NotificationReport"
# - 'FindingsReport'
- "FileBasedFindingsReport"
output-reports:
active: true
exclude:
# - 'TxtOutputReport'
# - 'XmlOutputReport'
# - 'HtmlOutputReport'
comments:
active: true
AbsentOrWrongFileLicense:
active: false
licenseTemplateFile: "license.template"
licenseTemplateIsRegex: false
CommentOverPrivateFunction:
active: false
CommentOverPrivateProperty:
active: false
DeprecatedBlockTag:
active: false
EndOfSentenceFormat:
active: false
endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)'
UndocumentedPublicClass:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
searchInNestedClass: true
searchInInnerClass: true
searchInInnerObject: true
searchInInnerInterface: true
UndocumentedPublicFunction:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
UndocumentedPublicProperty:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
complexity:
active: true
ComplexCondition:
active: true
threshold: 4
ComplexInterface:
active: false
threshold: 10
includeStaticDeclarations: false
includePrivateDeclarations: false
ComplexMethod:
active: true
threshold: 15
ignoreSingleWhenExpression: false
ignoreSimpleWhenEntries: false
ignoreNestingFunctions: false
nestingFunctions:
- "also"
- "apply"
- "forEach"
- "isNotNull"
- "ifNull"
- "let"
- "run"
- "use"
- "with"
LabeledExpression:
active: false
ignoredLabels: []
LargeClass:
active: true
threshold: 300
LongMethod:
active: true
threshold: 30
ignoreAnnotated:
excludes:
[
"**/ui/**",
"**/Cook4MeApp.kt"
]
LongParameterList:
active: false
functionThreshold: 6
constructorThreshold: 10
ignoreDefaultParameters: false
ignoreDataClasses: true
ignoreAnnotated: []
MethodOverloading:
active: false
threshold: 6
NamedArguments:
active: true
threshold: 3
NestedBlockDepth:
active: true
threshold: 4
ReplaceSafeCallChainWithRun:
active: false
StringLiteralDuplication:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
threshold: 3
ignoreAnnotation: true
excludeStringsWithLessThan5Characters: true
ignoreStringsRegex: "$^"
TooManyFunctions:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
thresholdInFiles: 11
thresholdInClasses: 11
thresholdInInterfaces: 11
thresholdInObjects: 11
thresholdInEnums: 11
ignoreDeprecated: false
ignorePrivate: true
ignoreOverridden: true
coroutines:
active: true
GlobalCoroutineUsage:
active: false
RedundantSuspendModifier:
active: false
SleepInsteadOfDelay:
active: false
SuspendFunWithFlowReturnType:
active: false
empty-blocks:
active: true
EmptyCatchBlock:
active: true
allowedExceptionNameRegex: "_|(ignore|expected).*"
EmptyClassBlock:
active: true
EmptyDefaultConstructor:
active: true
EmptyDoWhileBlock:
active: true
EmptyElseBlock:
active: true
EmptyFinallyBlock:
active: true
EmptyForBlock:
active: true
EmptyFunctionBlock:
active: true
ignoreOverridden: false
EmptyIfBlock:
active: true
EmptyInitBlock:
active: true
EmptyKtFile:
active: true
EmptySecondaryConstructor:
active: true
EmptyTryBlock:
active: true
EmptyWhenBlock:
active: true
EmptyWhileBlock:
active: true
exceptions:
active: true
ExceptionRaisedInUnexpectedLocation:
active: true
methodNames:
- "equals"
- "finalize"
- "hashCode"
- "toString"
InstanceOfCheckForException:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
NotImplementedDeclaration:
active: false
ObjectExtendsThrowable:
active: true
PrintStackTrace:
active: true
RethrowCaughtException:
active: true
ReturnFromFinally:
active: true
ignoreLabeled: false
SwallowedException:
active: true
ignoredExceptionTypes:
- "InterruptedException"
- "MalformedURLException"
- "NumberFormatException"
- "ParseException"
allowedExceptionNameRegex: "_|(ignore|expected).*"
ThrowingExceptionFromFinally:
active: true
ThrowingExceptionInMain:
active: false
ThrowingExceptionsWithoutMessageOrCause:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
exceptions:
- "ArrayIndexOutOfBoundsException"
- "Error"
- "Exception"
- "IllegalArgumentException"
- "IllegalMonitorStateException"
- "IllegalStateException"
- "IndexOutOfBoundsException"
- "NullPointerException"
- "RuntimeException"
- "Throwable"
ThrowingNewInstanceOfSameException:
active: true
TooGenericExceptionCaught:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
exceptionNames:
- "ArrayIndexOutOfBoundsException"
- "Error"
- "Exception"
- "IllegalMonitorStateException"
- "IndexOutOfBoundsException"
- "NullPointerException"
- "RuntimeException"
- "Throwable"
allowedExceptionNameRegex: "_|(ignore|expected).*"
TooGenericExceptionThrown:
active: true
exceptionNames:
- "Error"
- "Exception"
- "RuntimeException"
- "Throwable"
formatting:
active: true
android: false
autoCorrect: true
AnnotationOnSeparateLine:
active: true
autoCorrect: true
AnnotationSpacing:
active: true
autoCorrect: true
ArgumentListWrapping:
active: false
autoCorrect: true
indentSize: 4
maxLineLength: 120
ChainWrapping:
active: true
autoCorrect: true
CommentSpacing:
active: true
autoCorrect: true
EnumEntryNameCase:
active: true
autoCorrect: true
Filename:
active: true
FinalNewline:
active: true
autoCorrect: true
insertFinalNewLine: true
ImportOrdering:
active: true
autoCorrect: true
layout: "*,java.**,javax.**,kotlin.**,^"
Indentation:
active: true
autoCorrect: true
indentSize: 4
continuationIndentSize: 4
MaximumLineLength:
active: false
maxLineLength: 120
ignoreBackTickedIdentifier: false
ModifierOrdering:
active: true
autoCorrect: true
MultiLineIfElse:
active: true
autoCorrect: true
NoBlankLineBeforeRbrace:
active: true
autoCorrect: true
NoConsecutiveBlankLines:
active: true
autoCorrect: true
NoEmptyClassBody:
active: true
autoCorrect: true
NoEmptyFirstLineInMethodBlock:
active: true
autoCorrect: true
NoLineBreakAfterElse:
active: true
autoCorrect: true
NoLineBreakBeforeAssignment:
active: true
autoCorrect: true
NoMultipleSpaces:
active: true
autoCorrect: true
NoSemicolons:
active: true
autoCorrect: true
NoTrailingSpaces:
active: true
autoCorrect: true
NoUnitReturn:
active: true
autoCorrect: true
NoUnusedImports:
active: true
autoCorrect: true
NoWildcardImports:
active: true
PackageName:
active: true
autoCorrect: true
ParameterListWrapping:
active: true
autoCorrect: true
indentSize: 4
maxLineLength: 120
SpacingAroundAngleBrackets:
active: true
autoCorrect: true
SpacingAroundColon:
active: true
autoCorrect: true
SpacingAroundComma:
active: true
autoCorrect: true
SpacingAroundCurly:
active: true
autoCorrect: true
SpacingAroundDot:
active: true
autoCorrect: true
SpacingAroundDoubleColon:
active: true
autoCorrect: true
SpacingAroundKeyword:
active: true
autoCorrect: true
SpacingAroundOperators:
active: true
autoCorrect: true
SpacingAroundParens:
active: true
autoCorrect: true
SpacingAroundRangeOperator:
active: true
autoCorrect: true
SpacingAroundUnaryOperator:
active: true
autoCorrect: true
SpacingBetweenDeclarationsWithAnnotations:
active: true
autoCorrect: true
SpacingBetweenDeclarationsWithComments:
active: true
autoCorrect: true
StringTemplate:
active: true
autoCorrect: true
naming:
active: true
BooleanPropertyNaming:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
allowedPattern: "^(is|has|are)"
ClassNaming:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
classPattern: "[A-Z][a-zA-Z0-9]*"
ConstructorParameterNaming:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
parameterPattern: "[a-z][A-Za-z0-9]*"
privateParameterPattern: "[a-z][A-Za-z0-9]*"
excludeClassPattern: "$^"
ignoreOverridden: true
EnumNaming:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
enumEntryPattern: "[A-Z][_a-zA-Z0-9]*"
ForbiddenClassName:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
forbiddenName: []
FunctionMaxLength:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
maximumFunctionNameLength: 30
FunctionMinLength:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
minimumFunctionNameLength: 3
FunctionNaming:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
functionPattern: "([a-z][a-zA-Z0-9]*)|(`.*`)"
excludeClassPattern: "$^"
ignoreOverridden: true
ignoreAnnotated:
- "Composable"
FunctionParameterNaming:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
parameterPattern: "[a-z][A-Za-z0-9]*"
excludeClassPattern: "$^"
ignoreOverridden: true
InvalidPackageDeclaration:
active: true
excludes: ["**/*.kts"]
rootPackage: ""
MatchingDeclarationName:
active: true
mustBeFirst: true
MemberNameEqualsClassName:
active: true
ignoreOverridden: true
NoNameShadowing:
active: true
NonBooleanPropertyPrefixedWithIs:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
ObjectPropertyNaming:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
constantPattern: "[A-Za-z][_A-Za-z0-9]*"
propertyPattern: "[A-Za-z][_A-Za-z0-9]*"
privatePropertyPattern: "(_)?[A-Za-z][_A-Za-z0-9]*"
PackageNaming:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*'
TopLevelPropertyNaming:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
constantPattern: "[A-Z][_A-Z0-9]*"
propertyPattern: "[A-Za-z][_A-Za-z0-9]*"
privatePropertyPattern: "_?[A-Za-z][_A-Za-z0-9]*"
VariableMaxLength:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
maximumVariableNameLength: 64
VariableMinLength:
active: false
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
minimumVariableNameLength: 1
VariableNaming:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
variablePattern: "[a-z][A-Za-z0-9]*"
privateVariablePattern: "(_)?[a-z][A-Za-z0-9]*"
excludeClassPattern: "$^"
ignoreOverridden: true
performance:
active: true
ArrayPrimitive:
active: true
ForEachOnRange:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
SpreadOperator:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
UnnecessaryTemporaryInstantiation:
active: true
potential-bugs:
active: true
AvoidReferentialEquality:
active: false
forbiddenTypePatterns:
- "kotlin.String"
CastToNullableType:
active: true
Deprecation:
active: true
DontDowncastCollectionTypes:
active: true
DoubleMutabilityForCollection:
active: true
DuplicateCaseInWhenExpression:
active: true
EqualsAlwaysReturnsTrueOrFalse:
active: true
EqualsWithHashCodeExist:
active: true
ExitOutsideMain:
active: true
ExplicitGarbageCollectionCall:
active: true
HasPlatformType:
active: false
IgnoredReturnValue:
active: false
restrictToAnnotatedMethods: true
returnValueAnnotations:
- "*.CheckResult"
- "*.CheckReturnValue"
ignoreReturnValueAnnotations:
- "*.CanIgnoreReturnValue"
ImplicitDefaultLocale:
active: true
ImplicitUnitReturnType:
active: false
allowExplicitReturnType: true
InvalidRange:
active: true
IteratorHasNextCallsNextMethod:
active: true
IteratorNotThrowingNoSuchElementException:
active: true
LateinitUsage:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
ignoreAnnotated: []
ignoreOnClassesPattern: ""
MapGetWithNotNullAssertionOperator:
active: true
MissingWhenCase:
active: true
allowElseExpression: true
NullableToStringCall:
active: false
RedundantElseInWhen:
active: true
UnconditionalJumpStatementInLoop:
active: true
UnnecessaryNotNullOperator:
active: true
UnnecessarySafeCall:
active: true
UnreachableCatchBlock:
active: true
UnreachableCode:
active: true
UnsafeCallOnNullableType:
active: true
UnsafeCast:
active: true
UnusedUnaryOperator:
active: true
UselessPostfixExpression:
active: true
WrongEqualsTypeParameter:
active: true
style:
active: true
ClassOrdering:
active: true
CollapsibleIfStatements:
active: true
DataClassContainsFunctions:
active: true
conversionFunctionPrefix: "to"
DataClassShouldBeImmutable:
active: true
DestructuringDeclarationWithTooManyEntries:
active: true
maxDestructuringEntries: 3
EqualsNullCall:
active: true
EqualsOnSignatureLine:
active: true
ExplicitCollectionElementAccessMethod:
active: false
ExplicitItLambdaParameter:
active: true
ExpressionBodySyntax:
active: true
includeLineWrapping: true
ForbiddenComment:
active: true
values: ["FIXME:", "STOPSHIP:", "@author"]
allowedPatterns: ""
ForbiddenImport:
active: false
imports: []
forbiddenPatterns: ""
ForbiddenMethodCall:
active: false
methods:
- "kotlin.io.print"
- "kotlin.io.println"
ForbiddenPublicDataClass:
active: true
excludes: ["**"]
ignorePackages:
- "*.internal"
- "*.internal.*"
ForbiddenVoid:
active: true
ignoreOverridden: false
ignoreUsageInGenerics: false
FunctionOnlyReturningConstant:
active: true
ignoreOverridableFunction: true
ignoreActualFunction: true
excludedFunctions: ""
ignoreAnnotated:
- "dagger.Provides"
LibraryCodeMustSpecifyReturnType:
active: true
excludes: ["**"]
LibraryEntitiesShouldNotBePublic:
active: true
excludes: ["**"]
LoopWithTooManyJumpStatements:
active: true
maxJumpCount: 1
MagicNumber:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
ignoreNumbers:
- "-1"
- "0"
- "1"
- "2"
ignoreHashCodeFunction: true
ignorePropertyDeclaration: true
ignoreLocalVariableDeclaration: false
ignoreConstantDeclaration: true
ignoreCompanionObjectPropertyDeclaration: true
ignoreAnnotation: false
ignoreNamedArgument: true
ignoreEnums: false
ignoreRanges: false
ignoreExtensionFunctions: true
MandatoryBracesIfStatements:
active: true
MandatoryBracesLoops:
active: true
MaxLineLength:
active: true
maxLineLength: 120
excludePackageStatements: true
excludeImportStatements: true
excludeCommentStatements: false
MayBeConst:
active: true
ModifierOrder:
active: true
MultilineLambdaItParameter:
active: false
NestedClassesVisibility:
active: true
NewLineAtEndOfFile:
active: true
NoTabs:
active: true
ObjectLiteralToLambda:
active: true
OptionalAbstractKeyword:
active: true
OptionalUnit:
active: true
OptionalWhenBraces:
active: true
PreferToOverPairSyntax:
active: true
ProtectedMemberInFinalClass:
active: true
RedundantExplicitType:
active: true
RedundantHigherOrderMapUsage:
active: true
RedundantVisibilityModifierRule:
active: true
ReturnCount:
active: true
max: 2
excludedFunctions: "equals"
excludeLabeled: false
excludeReturnFromLambda: true
excludeGuardClauses: false
SafeCast:
active: true
SerialVersionUIDInSerializableClass:
active: true
SpacingBetweenPackageAndImports:
active: true
ThrowsCount:
active: true
max: 2
excludeGuardClauses: false
TrailingWhitespace:
active: true
UnderscoresInNumericLiterals:
active: true
acceptableLength: 5
UnnecessaryAbstractClass:
active: true
ignoreAnnotated:
- "dagger.Module"
UnnecessaryAnnotationUseSiteTarget:
active: true
UnnecessaryApply:
active: true
UnnecessaryFilter:
active: true
UnnecessaryInheritance:
active: true
UnnecessaryLet:
active: true
UnnecessaryParentheses:
active: true
UntilInsteadOfRangeTo:
active: false
UnusedImports:
active: true
UnusedPrivateClass:
active: true
UnusedPrivateMember:
active: true
allowedNames: "(_|ignored|expected|serialVersionUID)"
UseArrayLiteralsInAnnotations:
active: true
UseCheckNotNull:
active: true
UseCheckOrError:
active: true
UseDataClass:
active: true
ignoreAnnotated: []
allowVars: false
UseEmptyCounterpart:
active: false
UseIfEmptyOrIfBlank:
active: true
UseIfInsteadOfWhen:
active: true
UseIsNullOrEmpty:
active: true
UseOrEmpty:
active: true
UseRequire:
active: true
UseRequireNotNull:
active: true
UselessCallOnNotNull:
active: true
UtilityClassWithPublicConstructor:
active: true
VarCouldBeVal:
active: true
WildcardImport:
active: true
excludes:
[
"**/test/**",
"**/androidTest/**",
"**/commonTest/**",
"**/jvmTest/**",
"**/jsTest/**",
"**/iosTest/**",
]
excludeImports:
- "java.util.*"
- "kotlinx.android.synthetic.*"