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' - 'LiteFindingsReport' output-reports: active: true exclude: - 'TxtOutputReport' - 'XmlOutputReport' - 'HtmlOutputReport' #- 'MdOutputReport' comments: active: true AbsentOrWrongFileLicense: active: false licenseTemplateFile: 'license.template' licenseTemplateIsRegex: false CommentOverPrivateFunction: active: true CommentOverPrivateProperty: active: true DeprecatedBlockTag: active: true EndOfSentenceFormat: active: true endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)' KDocReferencesNonPublicProperty: active: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] OutdatedDocumentation: active: true matchTypeParameters: true matchDeclarationsOrder: true allowParamOnConstructorProperties: false UndocumentedPublicClass: active: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] searchInNestedClass: true searchInInnerClass: true searchInInnerObject: true searchInInnerInterface: true UndocumentedPublicFunction: active: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] UndocumentedPublicProperty: active: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] complexity: active: true ComplexCondition: active: true threshold: 4 ComplexInterface: active: true threshold: 20 includeStaticDeclarations: false includePrivateDeclarations: false # ComplexMethod: # active: true # threshold: 30 # ignoreSingleWhenExpression: false # ignoreSimpleWhenEntries: false # ignoreNestingFunctions: false # nestingFunctions: # - 'also' # - 'apply' # - 'forEach' # - 'isNotNull' # - 'ifNull' # - 'let' # - 'run' # - 'use' # - 'with' LabeledExpression: active: true ignoredLabels: [] LargeClass: active: true threshold: 600 LongMethod: active: true threshold: 250 LongParameterList: active: true functionThreshold: 10 constructorThreshold: 15 ignoreDefaultParameters: false ignoreDataClasses: true ignoreAnnotatedParameter: [] MethodOverloading: active: true threshold: 6 NamedArguments: active: true threshold: 3 ignoreArgumentsMatchingNames: false NestedBlockDepth: active: true threshold: 4 NestedScopeFunctions: active: true threshold: 1 functions: - 'kotlin.apply' - 'kotlin.run' - 'kotlin.with' - 'kotlin.let' - 'kotlin.also' ReplaceSafeCallChainWithRun: active: true StringLiteralDuplication: active: true 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: 35 thresholdInClasses: 35 thresholdInInterfaces: 35 thresholdInObjects: 35 thresholdInEnums: 35 ignoreDeprecated: false ignorePrivate: false # ignoreOverridden: false coroutines: active: true GlobalCoroutineUsage: active: true InjectDispatcher: active: true dispatcherNames: - 'IO' - 'Default' - 'Unconfined' RedundantSuspendModifier: active: true autoCorrect: true SleepInsteadOfDelay: active: true SuspendFunWithCoroutineScopeReceiver: active: true SuspendFunWithFlowReturnType: active: true 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: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] NotImplementedDeclaration: active: true 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).*' excludes: [ '**/test/**', '**/androidTest/**'] ThrowingExceptionFromFinally: active: true ThrowingExceptionInMain: active: true ThrowingExceptionsWithoutMessageOrCause: active: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] exceptions: - 'ArrayIndexOutOfBoundsException' - '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' naming: active: true BooleanPropertyNaming: active: true allowedPattern: '^(is|has|are)' # ignoreOverridden: true ClassNaming: active: true classPattern: '[A-Z][a-zA-Z0-9]*' ConstructorParameterNaming: active: true parameterPattern: '[a-z][A-Za-z0-9]*' privateParameterPattern: '[a-z][A-Za-z0-9]*' excludeClassPattern: '$^' # ignoreOverridden: true EnumNaming: active: true enumEntryPattern: '[A-Z][_a-zA-Z0-9]*' ForbiddenClassName: active: true forbiddenName: [] FunctionMaxLength: active: true maximumFunctionNameLength: 50 excludes: [ '**/test/**', '**/androidTest/**'] FunctionMinLength: active: true minimumFunctionNameLength: 1 FunctionNaming: active: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] functionPattern: '[a-zA-Z][a-zA-Z0-9]*' # Non-default for Jetpack Compose excludeClassPattern: '$^' # ignoreOverridden: true FunctionParameterNaming: active: true parameterPattern: '[a-z][A-Za-z0-9]*' excludeClassPattern: '$^' # ignoreOverridden: true InvalidPackageDeclaration: active: true rootPackage: '' requireRootInDeclaration: false LambdaParameterNaming: active: true parameterPattern: '[a-z][A-Za-z0-9]*|_' MatchingDeclarationName: active: true mustBeFirst: true MemberNameEqualsClassName: active: true # ignoreOverridden: true NoNameShadowing: active: true NonBooleanPropertyPrefixedWithIs: active: true ObjectPropertyNaming: active: true 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 packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*' TopLevelPropertyNaming: active: true constantPattern: '[A-Z][_A-Z0-9]*' propertyPattern: '[A-Za-z][_A-Za-z0-9]*' privatePropertyPattern: '_?[A-Za-z][_A-Za-z0-9]*' VariableMaxLength: active: true maximumVariableNameLength: 64 VariableMinLength: active: true minimumVariableNameLength: 1 VariableNaming: active: true variablePattern: '[a-z][A-Za-z0-9]*' privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*' excludeClassPattern: '$^' # ignoreOverridden: true performance: active: true ArrayPrimitive: active: true CouldBeSequence: active: true autoCorrect: true threshold: 3 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: true forbiddenTypePatterns: - 'kotlin.String' CastToNullableType: active: true Deprecation: active: true DontDowncastCollectionTypes: active: true DoubleMutabilityForCollection: active: true mutableTypes: - 'kotlin.collections.MutableList' - 'kotlin.collections.MutableMap' - 'kotlin.collections.MutableSet' - 'java.util.ArrayList' - 'java.util.LinkedHashSet' - 'java.util.HashSet' - 'java.util.LinkedHashMap' - 'java.util.HashMap' # DuplicateCaseInWhenExpression: # active: true ElseCaseInsteadOfExhaustiveWhen: active: true EqualsAlwaysReturnsTrueOrFalse: active: true EqualsWithHashCodeExist: active: true ExitOutsideMain: active: true ExplicitGarbageCollectionCall: active: true HasPlatformType: active: true IgnoredReturnValue: active: true # restrictToAnnotatedMethods: true restrictToConfig: true returnValueAnnotations: - '*.CheckResult' - '*.CheckReturnValue' ignoreReturnValueAnnotations: - '*.CanIgnoreReturnValue' ignoreFunctionCall: [] ImplicitDefaultLocale: active: true ImplicitUnitReturnType: active: true allowExplicitReturnType: true InvalidRange: active: true IteratorHasNextCallsNextMethod: active: true IteratorNotThrowingNoSuchElementException: active: true LateinitUsage: active: false # Disabled for Dagger excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] ignoreOnClassesPattern: '' MapGetWithNotNullAssertionOperator: active: true MissingPackageDeclaration: active: true excludes: ['**/*.kts'] # MissingWhenCase: # active: true # allowElseExpression: true NullCheckOnMutableProperty: active: true NullableToStringCall: active: true # RedundantElseInWhen: # active: true UnconditionalJumpStatementInLoop: active: true UnnecessaryNotNullOperator: active: true UnnecessarySafeCall: active: true UnreachableCatchBlock: active: true UnreachableCode: active: true UnsafeCallOnNullableType: active: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] UnsafeCast: active: true UnusedUnaryOperator: active: true UselessPostfixExpression: active: true WrongEqualsTypeParameter: active: true style: active: true CanBeNonNullable: active: true autoCorrect: true CascadingCallWrapping: active: true includeElvis: true ClassOrdering: active: true CollapsibleIfStatements: active: true DataClassContainsFunctions: active: true conversionFunctionPrefix: - 'to' DataClassShouldBeImmutable: active: true autoCorrect: true DestructuringDeclarationWithTooManyEntries: active: true maxDestructuringEntries: 3 EqualsNullCall: active: true EqualsOnSignatureLine: active: true ExplicitCollectionElementAccessMethod: active: true ExplicitItLambdaParameter: active: true ExpressionBodySyntax: active: false # Disabled because I personally feel explicitness and braces helps readability includeLineWrapping: false ForbiddenComment: active: true # values: # - 'FIXME:' # - 'STOPSHIP:' # - 'TODO:' allowedPatterns: '' # customMessage: '' ForbiddenImport: active: true imports: [] forbiddenPatterns: '' ForbiddenMethodCall: active: true methods: - 'kotlin.io.print' - 'kotlin.io.println' # ForbiddenPublicDataClass: # active: true # excludes: ['**'] # ignorePackages: # - '*.internal' # - '*.internal.*' ForbiddenSuppress: active: true rules: [] ForbiddenVoid: active: true # ignoreOverridden: false ignoreUsageInGenerics: false FunctionOnlyReturningConstant: active: true ignoreOverridableFunction: true ignoreActualFunction: true excludedFunctions: - '' # LibraryCodeMustSpecifyReturnType: # active: true # autoCorrect: true # excludes: ['**'] # LibraryEntitiesShouldNotBePublic: # active: true # autoCorrect: true # excludes: ['**'] LoopWithTooManyJumpStatements: active: true maxJumpCount: 1 MagicNumber: active: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**', '**/*.kts'] ignoreNumbers: - '-1' - '0' - '1' - '2' ignoreHashCodeFunction: true ignorePropertyDeclaration: false ignoreLocalVariableDeclaration: false ignoreConstantDeclaration: true ignoreCompanionObjectPropertyDeclaration: true ignoreAnnotation: false ignoreNamedArgument: true ignoreEnums: false ignoreRanges: false ignoreExtensionFunctions: true # MandatoryBracesIfStatements: # active: true # autoCorrect: true MandatoryBracesLoops: active: true MaxChainedCallsOnSameLine: active: true maxChainedCalls: 5 MaxLineLength: active: true maxLineLength: 120 excludePackageStatements: true excludeImportStatements: true excludeCommentStatements: false MayBeConst: active: true autoCorrect: true ModifierOrder: active: true MultilineLambdaItParameter: active: true NestedClassesVisibility: active: true NewLineAtEndOfFile: active: true autoCorrect: true NoTabs: active: true autoCorrect: true NullableBooleanCheck: active: true ObjectLiteralToLambda: active: true OptionalAbstractKeyword: active: true OptionalUnit: active: true # OptionalWhenBraces: # active: false # Disabled because I personally feel braces helps readability PreferToOverPairSyntax: active: true ProtectedMemberInFinalClass: active: true RedundantExplicitType: active: true RedundantHigherOrderMapUsage: active: true RedundantVisibilityModifierRule: active: true autoCorrect: true ReturnCount: active: true max: 3 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: 4 allowNonStandardGrouping: false UnnecessaryAbstractClass: active: true UnnecessaryAnnotationUseSiteTarget: active: true UnnecessaryApply: active: true UnnecessaryBackticks: active: true UnnecessaryFilter: active: true UnnecessaryInheritance: active: true UnnecessaryInnerClass: active: true UnnecessaryLet: active: true UnnecessaryParentheses: active: true autoCorrect: true UntilInsteadOfRangeTo: active: true UnusedImports: active: true autoCorrect: true UnusedPrivateClass: active: true UnusedPrivateMember: active: true allowedNames: '(_|ignored|expected|serialVersionUID)' UseAnyOrNoneInsteadOfFind: active: true UseArrayLiteralsInAnnotations: active: true UseCheckNotNull: active: true UseCheckOrError: active: true UseDataClass: active: true allowVars: false UseEmptyCounterpart: active: true UseIfEmptyOrIfBlank: active: true UseIfInsteadOfWhen: active: true autoCorrect: true UseIsNullOrEmpty: active: true autoCorrect: true UseOrEmpty: active: true autoCorrect: true UseRequire: active: true UseRequireNotNull: active: true UselessCallOnNotNull: active: true UtilityClassWithPublicConstructor: active: true VarCouldBeVal: active: true autoCorrect: true ignoreLateinitVar: true WildcardImport: active: true autoCorrect: true excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] excludeImports: - 'java.util.*'