Last active
April 22, 2025 19:44
-
-
Save renatojobal/7b770d8fbb911c149e890b96546281d6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| plugins { | |
| alias(libs.plugins.ktlint) apply false | |
| alias(libs.plugins.detekt) apply false | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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: 100 | |
| LongParameterList: | |
| active: true | |
| functionThreshold: 6 | |
| constructorThreshold: 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/**'] | |
| thresholdInFiles: 16 | |
| thresholdInClasses: 16 | |
| thresholdInInterfaces: 16 | |
| thresholdInObjects: 16 | |
| thresholdInEnums: 16 | |
| ignoreDeprecated: false | |
| ignorePrivate: false | |
| ignoreOverridden: false | |
| ignoreAnnotatedFunctions: [] | |
| 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: 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/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] | |
| NotImplementedDeclaration: | |
| active: false | |
| ObjectExtendsThrowable: | |
| active: false | |
| 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/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] | |
| exceptions: | |
| - 'ArrayIndexOutOfBoundsException' | |
| - 'Exception' | |
| - 'IllegalArgumentException' | |
| - 'IllegalMonitorStateException' | |
| - 'IllegalStateException' | |
| - 'IndexOutOfBoundsException' | |
| - 'NullPointerException' | |
| - 'RuntimeException' | |
| - 'Throwable' | |
| ThrowingNewInstanceOfSameException: | |
| active: true | |
| TooGenericExceptionCaught: | |
| active: true | |
| excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/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: 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/**'] | |
| 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 | |
| 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]*)*' | |
| 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: 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: true | |
| 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: 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: ['Composable'] | |
| 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.*' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [versions] | |
| detekt = "1.23.7" # Code format | |
| ktlint = "11.6.0" # Code format | |
| [libraries] | |
| detekt-formatting = { group = "io.gitlab.arturbosch.detekt", name = "detekt-formatting", version.ref = "detekt" } | |
| [plugins] | |
| detekt = { id= "io.gitlab.arturbosch.detekt", version.ref = "detekt" } | |
| ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| plugins { | |
| alias(libs.plugins.ktlint) | |
| alias(libs.plugins.detekt) | |
| } | |
| // Detekt configuration with formatting rule set | |
| detekt { | |
| toolVersion = libs.versions.detekt.get() | |
| source.setFrom(files("src/commonMain/kotlin", "src/androidMain/kotlin", "src/iosMain/kotlin")) | |
| config.setFrom(files("$rootDir/config/detekt/detekt.yml")) | |
| buildUponDefaultConfig = true // Use default config as a base | |
| disableDefaultRuleSets = true // Disable default rule sets | |
| } | |
| dependencies { | |
| // Detekt formatting plugin | |
| detektPlugins(libs.detekt.formatting) | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| # Git pre-push hook to run KMP unit tests and linter before pushing | |
| # Make sure this file is saved at: .git/hooks/pre-push and is executable (chmod +x .git/hooks/pre-push) | |
| echo "π Running unit tests..." | |
| ./gradlew test | |
| TEST_EXIT_CODE=$? | |
| if [ $TEST_EXIT_CODE -ne 0 ]; then | |
| echo "β Unit tests failed. Push aborted." | |
| exit $TEST_EXIT_CODE | |
| fi | |
| echo "π Running detekt check..." | |
| OUTPUT="/tmp/detekt-$(date +%s)" | |
| ./gradlew detekt > "$OUTPUT" | |
| DETEKT_EXIT_CODE=$? | |
| if [ $DETEKT_EXIT_CODE -ne 0 ]; then | |
| cat "$OUTPUT" | |
| rm "$OUTPUT" | |
| echo "***********************************************" | |
| echo " β Detekt failed " | |
| echo " Please fix the above issues before pushing " | |
| echo "***********************************************" | |
| exit $DETEKT_EXIT_CODE | |
| fi | |
| rm "$OUTPUT" | |
| echo "β All checks passed. Proceeding with push." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment