# TODO: Update `rootPackage` in naming -> InvalidPackageDeclaration build: maxIssues: 0 excludeCorrectable: false weights: # complexity: 2 # LongParameterList: 1 # style: 1 # comments: 1 config: validation: true # when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]' excludes: '' processors: active: true exclude: - 'DetektProgressListener' - 'FunctionCountProcessor' - 'PropertyCountProcessor' - 'ClassCountProcessor' - 'PackageCountProcessor' - 'KtFileCountProcessor' console-reports: active: true exclude: - 'ProjectStatisticsReport' - 'NotificationReport' - 'FileBasedFindingsReport' output-reports: active: true exclude: # - 'HtmlOutputReport' - 'TxtOutputReport' # - 'XmlOutputReport' comments: active: true AbsentOrWrongFileLicense: active: false licenseTemplateFile: 'license.dev.jansel.template' CommentOverPrivateFunction: active: false CommentOverPrivateProperty: active: false EndOfSentenceFormat: active: true endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)' excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] UndocumentedPublicClass: active: false searchInNestedClass: true searchInInnerClass: true searchInInnerObject: true searchInInnerInterface: true UndocumentedPublicFunction: active: false UndocumentedPublicProperty: active: false complexity: active: true ComplexCondition: active: true threshold: 10 ComplexInterface: active: false threshold: 10 includeStaticDeclarations: false includePrivateDeclarations: false ComplexMethod: active: false threshold: 15 ignoreSingleWhenExpression: false ignoreSimpleWhenEntries: false ignoreNestingFunctions: false nestingFunctions: [ run, let, apply, with, also, use, forEach, isNotNull, ifNull ] LabeledExpression: active: false ignoredLabels: [ ] LargeClass: active: false threshold: 600 LongMethod: active: false threshold: 60 LongParameterList: active: false functionThreshold: 6 constructorThreshold: 7 ignoreDefaultParameters: false ignoreDataClasses: true ignoreAnnotated: [ ] MethodOverloading: active: false threshold: 6 NestedBlockDepth: active: false threshold: 4 ReplaceSafeCallChainWithRun: active: true StringLiteralDuplication: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] threshold: 3 ignoreAnnotation: true excludeStringsWithLessThan5Characters: true ignoreStringsRegex: '$^' TooManyFunctions: active: false excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] thresholdInFiles: 11 thresholdInClasses: 11 thresholdInInterfaces: 11 thresholdInObjects: 11 thresholdInEnums: 11 ignoreDeprecated: false ignorePrivate: false ignoreOverridden: false coroutines: active: true GlobalCoroutineUsage: active: true RedundantSuspendModifier: 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: [ toString, hashCode, equals, finalize ] InstanceOfCheckForException: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] NotImplementedDeclaration: active: false PrintStackTrace: active: true RethrowCaughtException: active: true ReturnFromFinally: active: true ignoreLabeled: false SwallowedException: active: false ignoredExceptionTypes: - InterruptedException - NumberFormatException - ParseException - MalformedURLException allowedExceptionNameRegex: '^(_|(ignore|expected).*)' ThrowingExceptionFromFinally: active: true ThrowingExceptionInMain: active: true ThrowingExceptionsWithoutMessageOrCause: active: true exceptions: - IllegalArgumentException - IllegalStateException - IOException ThrowingNewInstanceOfSameException: active: true TooGenericExceptionCaught: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] exceptionNames: - ArrayIndexOutOfBoundsException - Error - Exception - IllegalMonitorStateException - NullPointerException - IndexOutOfBoundsException - RuntimeException - Throwable allowedExceptionNameRegex: '^(_|(ignore|expected).*)' TooGenericExceptionThrown: active: true exceptionNames: - Error - Exception - Throwable - RuntimeException formatting: active: true android: false autoCorrect: true AnnotationOnSeparateLine: active: true autoCorrect: true AnnotationSpacing: active: true autoCorrect: true ArgumentListWrapping: active: false # It's wrong! autoCorrect: true 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: false autoCorrect: false indentSize: 4 continuationIndentSize: 4 MaximumLineLength: active: true maxLineLength: 120 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: false autoCorrect: false NoSemicolons: active: true autoCorrect: true NoTrailingSpaces: active: true autoCorrect: true NoUnitReturn: active: true autoCorrect: true NoUnusedImports: active: true autoCorrect: true NoWildcardImports: active: false PackageName: active: true autoCorrect: true ParameterListWrapping: active: true autoCorrect: true indentSize: 4 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 SpacingBetweenDeclarationsWithAnnotations: active: true autoCorrect: true SpacingBetweenDeclarationsWithComments: active: true autoCorrect: true StringTemplate: active: true autoCorrect: true naming: active: true ClassNaming: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] classPattern: '[A-Z$][a-zA-Z0-9$]*' ConstructorParameterNaming: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] parameterPattern: '[a-z][A-Za-z0-9]*' privateParameterPattern: '[a-z][A-Za-z0-9]*' excludeClassPattern: '$^' ignoreOverridden: true EnumNaming: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] enumEntryPattern: '^[A-Z][_a-zA-Z0-9]*' ForbiddenClassName: active: false excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] forbiddenName: [ ] FunctionMaxLength: active: false excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] maximumFunctionNameLength: 30 FunctionMinLength: active: false excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] minimumFunctionNameLength: 3 FunctionNaming: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] functionPattern: '^([a-z$][a-zA-Z$0-9]*)|(`.*`)$' excludeClassPattern: '$^' ignoreOverridden: true FunctionParameterNaming: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] parameterPattern: '[a-z][A-Za-z0-9]*' excludeClassPattern: '$^' ignoreOverridden: true InvalidPackageDeclaration: active: true # TODO: Update this with your project's base package rootPackage: 'dev.jansel.feixiao' MatchingDeclarationName: active: true mustBeFirst: true MemberNameEqualsClassName: active: true ignoreOverridden: true NonBooleanPropertyPrefixedWithIs: active: true ObjectPropertyNaming: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] 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/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] packagePattern: '^[a-z]+(\.[a-z][A-Za-z0-9]*)*$' TopLevelPropertyNaming: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] 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/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] maximumVariableNameLength: 64 VariableMinLength: active: false excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] minimumVariableNameLength: 1 VariableNaming: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] 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/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] SpreadOperator: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] UnnecessaryTemporaryInstantiation: active: true potential-bugs: active: true Deprecation: active: true DuplicateCaseInWhenExpression: active: true EqualsAlwaysReturnsTrueOrFalse: active: true EqualsWithHashCodeExist: active: true ExplicitGarbageCollectionCall: active: true HasPlatformType: active: true IgnoredReturnValue: active: true ImplicitDefaultLocale: active: false ImplicitUnitReturnType: active: true allowExplicitReturnType: true InvalidRange: active: true IteratorHasNextCallsNextMethod: active: true IteratorNotThrowingNoSuchElementException: active: true LateinitUsage: active: false excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] excludeAnnotatedProperties: [ ] ignoreOnClassesPattern: '' MapGetWithNotNullAssertionOperator: active: true MissingWhenCase: active: true NullableToStringCall: active: true RedundantElseInWhen: active: true UnconditionalJumpStatementInLoop: active: true UnnecessaryNotNullOperator: active: true UnnecessarySafeCall: active: true UnreachableCode: active: true UnsafeCallOnNullableType: active: true UnsafeCast: 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 EqualsNullCall: active: true EqualsOnSignatureLine: active: true ExplicitCollectionElementAccessMethod: active: true ExplicitItLambdaParameter: active: true ExpressionBodySyntax: active: true includeLineWrapping: false ForbiddenComment: active: false values: [ 'TODO:', 'FIXME:', 'STOPSHIP:' ] allowedPatterns: '' ForbiddenImport: active: false imports: [ ] forbiddenPatterns: '' ForbiddenMethodCall: active: false methods: [ ] ForbiddenPublicDataClass: active: false ignorePackages: [ '*.internal', '*.internal.*' ] ForbiddenVoid: active: true ignoreOverridden: true ignoreUsageInGenerics: false FunctionOnlyReturningConstant: active: true ignoreOverridableFunction: true excludedFunctions: 'describeContents' excludeAnnotatedFunction: [ 'dagger.Provides' ] LibraryCodeMustSpecifyReturnType: active: true LibraryEntitiesShouldNotBePublic: active: true LoopWithTooManyJumpStatements: active: true maxJumpCount: 3 MagicNumber: active: true excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] ignoreNumbers: [ '-1', '0', '1', '2' ] ignoreHashCodeFunction: true ignorePropertyDeclaration: false ignoreLocalVariableDeclaration: false ignoreConstantDeclaration: true ignoreCompanionObjectPropertyDeclaration: true ignoreAnnotation: true ignoreNamedArgument: true ignoreEnums: true ignoreRanges: false MandatoryBracesIfStatements: active: true MandatoryBracesLoops: active: true MaxLineLength: active: true maxLineLength: 120 excludePackageStatements: true excludeImportStatements: true excludeCommentStatements: false MayBeConst: active: true ModifierOrder: active: true NestedClassesVisibility: active: true NewLineAtEndOfFile: active: true NoTabs: active: false OptionalAbstractKeyword: active: true OptionalUnit: active: false OptionalWhenBraces: active: true PreferToOverPairSyntax: active: true ProtectedMemberInFinalClass: active: true RedundantExplicitType: active: true RedundantVisibilityModifierRule: active: false ReturnCount: active: false max: 2 excludedFunctions: 'equals' excludeLabeled: false excludeReturnFromLambda: true excludeGuardClauses: false SafeCast: active: true SerialVersionUIDInSerializableClass: active: true SpacingBetweenPackageAndImports: active: true ThrowsCount: active: false max: 2 TrailingWhitespace: active: true UnderscoresInNumericLiterals: active: true acceptableDecimalLength: 5 UnnecessaryAbstractClass: active: true excludeAnnotatedClasses: [ 'dagger.Module' ] UnnecessaryAnnotationUseSiteTarget: active: true UnnecessaryApply: active: true UnnecessaryInheritance: active: true UnnecessaryLet: active: true UnnecessaryParentheses: active: true UntilInsteadOfRangeTo: active: true 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 excludeAnnotatedClasses: [ ] allowVars: false UseEmptyCounterpart: active: true UseIfInsteadOfWhen: active: true UseRequire: active: true UseRequireNotNull: active: true UselessCallOnNotNull: active: true UtilityClassWithPublicConstructor: active: true VarCouldBeVal: active: true WildcardImport: active: false excludes: [ '**/test/**', '**/androidTest/**', '**/*.Test.kt', '**/*.Spec.kt', '**/*.Spek.kt' ] excludeImports: [ 'java.util.*', 'kotlinx.android.synthetic.*' ]