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