build: maxIssues: 0 excludeCorrectable: false weights: # complexity: 2 # LongParameterList: 1 # style: 1 # comments: 1 config: validation: true warningsAsErrors: false checkExhaustiveness: 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' # - 'SarifOutputReport' 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<])|([.?!:]$)' KDocReferencesNonPublicProperty: active: false excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] OutdatedDocumentation: active: false matchTypeParameters: true matchDeclarationsOrder: true allowParamOnConstructorProperties: false UndocumentedPublicClass: active: false excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] searchInNestedClass: true searchInInnerClass: true searchInInnerObject: true searchInInnerInterface: true searchInProtectedClass: false UndocumentedPublicFunction: active: false excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] searchProtectedFunction: false UndocumentedPublicProperty: active: false excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] searchProtectedProperty: false complexity: active: true CognitiveComplexMethod: active: false threshold: 15 ComplexCondition: active: true threshold: 4 ComplexInterface: active: false threshold: 10 includeStaticDeclarations: false includePrivateDeclarations: false ignoreOverloaded: false CyclomaticComplexMethod: 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: 600 LongMethod: active: true threshold: 150 #60 LongParameterList: active: true # Updating Common values based on current scenario functionThreshold: 20 #6 constructorThreshold: 30 #7 ignoreDefaultParameters: false ignoreDataClasses: true ignoreAnnotatedParameter: [] MethodOverloading: active: false threshold: 6 NamedArguments: active: false threshold: 3 ignoreArgumentsMatchingNames: false NestedBlockDepth: active: true threshold: 4 NestedScopeFunctions: active: false threshold: 1 functions: - "kotlin.apply" - "kotlin.run" - "kotlin.with" - "kotlin.let" - "kotlin.also" ReplaceSafeCallChainWithRun: active: false StringLiteralDuplication: active: false excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] threshold: 3 ignoreAnnotation: true excludeStringsWithLessThan5Characters: true ignoreStringsRegex: "$^" TooManyFunctions: active: true excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] # Modifying default values 11 to 20 thresholdInFiles: 20 thresholdInClasses: 20 thresholdInInterfaces: 20 thresholdInObjects: 20 thresholdInEnums: 20 ignoreDeprecated: false ignorePrivate: false ignoreOverridden: false coroutines: active: true GlobalCoroutineUsage: active: false InjectDispatcher: active: true dispatcherNames: - "IO" - "Default" - "Unconfined" RedundantSuspendModifier: active: true SleepInsteadOfDelay: active: true SuspendFunSwallowedCancellation: active: false SuspendFunWithCoroutineScopeReceiver: active: false 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: false # Turning off for current implementation 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/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] NotImplementedDeclaration: active: false ObjectExtendsThrowable: active: false PrintStackTrace: active: true RethrowCaughtException: active: true ReturnFromFinally: active: true ignoreLabeled: false SwallowedException: active: false # Turning off for current implementation ignoredExceptionTypes: - "InterruptedException" - "MalformedURLException" - "NumberFormatException" - "ParseException" allowedExceptionNameRegex: "_|(ignore|expected).*" ThrowingExceptionFromFinally: active: true ThrowingExceptionInMain: active: false ThrowingExceptionsWithoutMessageOrCause: active: true excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] exceptions: - "ArrayIndexOutOfBoundsException" - "Exception" - "IllegalArgumentException" - "IllegalMonitorStateException" - "IllegalStateException" - "IndexOutOfBoundsException" - "NullPointerException" - "RuntimeException" - "Throwable" ThrowingNewInstanceOfSameException: active: true TooGenericExceptionCaught: active: false excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] exceptionNames: - "ArrayIndexOutOfBoundsException" - "Error" - "Exception" - "IllegalMonitorStateException" - "IndexOutOfBoundsException" - "NullPointerException" - "RuntimeException" - "Throwable" allowedExceptionNameRegex: "_|(ignore|expected).*" TooGenericExceptionThrown: active: false exceptionNames: - "Error" - "Exception" - "RuntimeException" - "Throwable" naming: active: true BooleanPropertyNaming: active: false allowedPattern: "^(is|has|are)" 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: "$^" EnumNaming: active: true enumEntryPattern: "[A-Z][_a-zA-Z0-9]*" ForbiddenClassName: active: false forbiddenName: [] FunctionMaxLength: active: false maximumFunctionNameLength: 30 FunctionMinLength: active: false minimumFunctionNameLength: 3 FunctionNaming: active: true excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", "**/generated/**", ] functionPattern: "[a-z][a-zA-Z0-9]*" excludeClassPattern: "$^" ignoreAnnotated: ["Composable"] FunctionParameterNaming: active: true parameterPattern: "[a-z][A-Za-z0-9]*" excludeClassPattern: "$^" InvalidPackageDeclaration: active: true rootPackage: "" requireRootInDeclaration: false LambdaParameterNaming: active: false parameterPattern: "[a-z][A-Za-z0-9]*|_" MatchingDeclarationName: active: true mustBeFirst: true excludes: [ "**/*.android.*", "**/*.desktop.*", "**/*.js.*", "**/*.native.*", "**/*.jvm.*", "**/*.linux.*", "**/*.macos.*", "**/*.wasmJs.*", ] MemberNameEqualsClassName: active: true ignoreOverridden: true NoNameShadowing: active: true NonBooleanPropertyPrefixedWithIs: active: false 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]*)*' excludes: [ "**/generated/**", ] 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: false maximumVariableNameLength: 100 #64 VariableMinLength: active: false minimumVariableNameLength: 1 VariableNaming: active: true variablePattern: "[a-z][A-Za-z0-9]*" privateVariablePattern: "(_)?[a-z][A-Za-z0-9]*" excludeClassPattern: "$^" performance: active: true ArrayPrimitive: active: true CouldBeSequence: active: false threshold: 3 ForEachOnRange: active: true excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] SpreadOperator: active: true excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] UnnecessaryPartOfBinaryExpression: active: false UnnecessaryTemporaryInstantiation: active: true potential-bugs: active: true AvoidReferentialEquality: active: true forbiddenTypePatterns: - "kotlin.String" CastNullableToNonNullableType: active: false CastToNullableType: active: false Deprecation: active: false DontDowncastCollectionTypes: active: false 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" ElseCaseInsteadOfExhaustiveWhen: active: false ignoredSubjectTypes: [] EqualsAlwaysReturnsTrueOrFalse: active: true EqualsWithHashCodeExist: active: true ExitOutsideMain: active: false ExplicitGarbageCollectionCall: active: true HasPlatformType: active: true IgnoredReturnValue: active: true restrictToConfig: true returnValueAnnotations: - "CheckResult" - "*.CheckResult" - "CheckReturnValue" - "*.CheckReturnValue" ignoreReturnValueAnnotations: - "CanIgnoreReturnValue" - "*.CanIgnoreReturnValue" returnValueTypes: - "kotlin.sequences.Sequence" - "kotlinx.coroutines.flow.*Flow" - "java.util.stream.*Stream" ignoreFunctionCall: [] ImplicitDefaultLocale: active: true ImplicitUnitReturnType: active: false allowExplicitReturnType: true InvalidRange: active: true IteratorHasNextCallsNextMethod: active: true IteratorNotThrowingNoSuchElementException: active: true LateinitUsage: active: false excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] ignoreOnClassesPattern: "" MapGetWithNotNullAssertionOperator: active: true MissingPackageDeclaration: active: false excludes: ["**/*.kts"] NullCheckOnMutableProperty: active: false NullableToStringCall: active: false PropertyUsedBeforeDeclaration: active: false UnconditionalJumpStatementInLoop: active: false UnnecessaryNotNullCheck: active: false UnnecessaryNotNullOperator: active: true UnnecessarySafeCall: active: true UnreachableCatchBlock: active: true UnreachableCode: active: true UnsafeCallOnNullableType: active: true excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/jsTest/**", "**/iosTest/**", ] UnsafeCast: active: true UnusedUnaryOperator: active: true UselessPostfixExpression: active: true WrongEqualsTypeParameter: active: true style: active: true AlsoCouldBeApply: active: false BracesOnIfStatements: active: false singleLine: "never" multiLine: "always" BracesOnWhenStatements: active: false singleLine: "necessary" multiLine: "consistent" CanBeNonNullable: active: false CascadingCallWrapping: active: false includeElvis: true ClassOrdering: active: false CollapsibleIfStatements: active: false DataClassContainsFunctions: active: false conversionFunctionPrefix: - "to" allowOperators: false DataClassShouldBeImmutable: active: false DestructuringDeclarationWithTooManyEntries: active: true maxDestructuringEntries: 3 DoubleNegativeLambda: active: false negativeFunctions: - reason: "Use `takeIf` instead." value: "takeUnless" - reason: "Use `all` instead." value: "none" negativeFunctionNameParts: - "not" - "non" EqualsNullCall: active: true EqualsOnSignatureLine: active: false ExplicitCollectionElementAccessMethod: active: false ExplicitItLambdaParameter: active: true ExpressionBodySyntax: active: false includeLineWrapping: false ForbiddenAnnotation: active: false annotations: - reason: "it is a java annotation. Use `Suppress` instead." value: "java.lang.SuppressWarnings" - reason: "it is a java annotation. Use `kotlin.Deprecated` instead." value: "java.lang.Deprecated" - reason: "it is a java annotation. Use `kotlin.annotation.MustBeDocumented` instead." value: "java.lang.annotation.Documented" - reason: "it is a java annotation. Use `kotlin.annotation.Target` instead." value: "java.lang.annotation.Target" - reason: "it is a java annotation. Use `kotlin.annotation.Retention` instead." value: "java.lang.annotation.Retention" - reason: "it is a java annotation. Use `kotlin.annotation.Repeatable` instead." value: "java.lang.annotation.Repeatable" - reason: "Kotlin does not support @Inherited annotation, see https://youtrack.jetbrains.com/issue/KT-22265" value: "java.lang.annotation.Inherited" ForbiddenComment: active: false # Turning off for this implementation comments: - reason: "Forbidden FIXME todo marker in comment, please fix the problem." value: "FIXME:" - reason: "Forbidden STOPSHIP todo marker in comment, please address the problem before shipping the code." value: "STOPSHIP:" - reason: "Forbidden TODO todo marker in comment, please do the changes." value: "TODO:" allowedPatterns: "" ForbiddenImport: active: false imports: [] forbiddenPatterns: "" ForbiddenMethodCall: active: false methods: - reason: "print does not allow you to configure the output stream. Use a logger instead." value: "kotlin.io.print" - reason: "println does not allow you to configure the output stream. Use a logger instead." value: "kotlin.io.println" ForbiddenSuppress: active: false rules: [] ForbiddenVoid: active: true ignoreOverridden: false ignoreUsageInGenerics: false FunctionOnlyReturningConstant: active: true ignoreOverridableFunction: true ignoreActualFunction: true excludedFunctions: [] LoopWithTooManyJumpStatements: active: true maxJumpCount: 1 MagicNumber: active: false # true excludes: [ "**/test/**", "**/androidTest/**", "**/commonTest/**", "**/jvmTest/**", "**/androidUnitTest/**", "**/androidInstrumentedTest/**", "**/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 MandatoryBracesLoops: active: false MaxChainedCallsOnSameLine: active: false maxChainedCalls: 5 MaxLineLength: active: true maxLineLength: 120 excludePackageStatements: true excludeImportStatements: true excludeCommentStatements: false excludeRawStrings: true MayBeConst: active: true ModifierOrder: active: true MultilineLambdaItParameter: active: false MultilineRawStringIndentation: active: false indentSize: 4 trimmingMethods: - "trimIndent" - "trimMargin" NestedClassesVisibility: active: true NewLineAtEndOfFile: active: true NoTabs: active: false NullableBooleanCheck: active: false ObjectLiteralToLambda: active: true OptionalAbstractKeyword: active: true OptionalUnit: active: false PreferToOverPairSyntax: active: false ProtectedMemberInFinalClass: active: true RedundantExplicitType: active: false RedundantHigherOrderMapUsage: active: true RedundantVisibilityModifierRule: active: false ReturnCount: active: true max: 2 excludedFunctions: - "equals" excludeLabeled: false excludeReturnFromLambda: true excludeGuardClauses: false SafeCast: active: true SerialVersionUIDInSerializableClass: active: true SpacingBetweenPackageAndImports: active: false StringShouldBeRawString: active: false maxEscapedCharacterCount: 2 ignoredCharacters: [] ThrowsCount: active: true max: 2 excludeGuardClauses: false TrailingWhitespace: active: false TrimMultilineRawString: active: false trimmingMethods: - "trimIndent" - "trimMargin" UnderscoresInNumericLiterals: active: false acceptableLength: 4 allowNonStandardGrouping: false UnnecessaryAbstractClass: active: true UnnecessaryAnnotationUseSiteTarget: active: false UnnecessaryApply: active: true UnnecessaryBackticks: active: false UnnecessaryBracesAroundTrailingLambda: active: false UnnecessaryFilter: active: true UnnecessaryInheritance: active: true UnnecessaryInnerClass: active: false UnnecessaryLet: active: false UnnecessaryParentheses: active: false allowForUnclearPrecedence: false UntilInsteadOfRangeTo: active: false UnusedImports: active: false UnusedParameter: active: true allowedNames: "ignored|expected" UnusedPrivateClass: active: true UnusedPrivateMember: active: true allowedNames: "" ignoreAnnotated: ['Preview', 'DevicePreviews'] UnusedPrivateProperty: active: true allowedNames: "_|ignored|expected|serialVersionUID" UseAnyOrNoneInsteadOfFind: active: true UseArrayLiteralsInAnnotations: active: true UseCheckNotNull: active: true UseCheckOrError: active: true UseDataClass: active: false allowVars: false UseEmptyCounterpart: active: false UseIfEmptyOrIfBlank: active: false UseIfInsteadOfWhen: active: false ignoreWhenContainingVariableDeclaration: false UseIsNullOrEmpty: active: true UseLet: active: false UseOrEmpty: active: true UseRequire: active: true UseRequireNotNull: active: true UseSumOfInsteadOfFlatMapSize: active: false UselessCallOnNotNull: active: true UtilityClassWithPublicConstructor: active: true VarCouldBeVal: active: true ignoreLateinitVar: false WildcardImport: active: true excludeImports: - "java.util.*" TwitterCompose: CompositionLocalAllowlist: active: false # You can optionally define a list of CompositionLocals that are allowed here # allowedCompositionLocals: LocalSomething,LocalSomethingElse CompositionLocalNaming: active: true ContentEmitterReturningValues: active: true # You can optionally add your own composables here # contentEmitters: MyComposable,MyOtherComposable ModifierComposable: active: true ModifierMissing: active: true ModifierReused: active: true ModifierWithoutDefault: active: true MultipleEmitters: active: true # You can optionally add your own composables here # contentEmitters: MyComposable,MyOtherComposable MutableParams: active: true ComposableNaming: active: true # You can optionally disable the checks in this rule for regex matches against the composable name (e.g. molecule presenters) # allowedComposableFunctionNames: .*Presenter,.*MoleculePresenter ComposableParamOrder: active: true PreviewNaming: active: true PreviewPublic: active: true # You can optionally disable that only previews with @PreviewParameter are flagged # previewPublicOnlyIfParams: false RememberMissing: active: true UnstableCollections: active: false ViewModelForwarding: active: true ViewModelInjection: active: true