# Default rules: https://github.com/detekt/detekt/blob/main/detekt-core/src/main/resources/default-detekt-config.yml

style:
  AlsoCouldBeApply:
    active: true
  OptionalWhenBraces:
    active: false
  CascadingCallWrapping:
    active: true
    includeElvis: true
  DataClassShouldBeImmutable:
    active: true
  EqualsNullCall:
    active: true
  EqualsOnSignatureLine:
    active: true
  ExplicitCollectionElementAccessMethod:
    active: true
  ExplicitItLambdaParameter:
    active: true
  MaxLineLength:
    # Default is 120
    maxLineLength: 160
  MagicNumber:
    active: false
  ReturnCount:
    active: false
  UnnecessaryAbstractClass:
    active: true
  FunctionOnlyReturningConstant:
    active: false
  UnusedPrivateMember:
    active: true
  UnusedParameter:
    active: true
  UnnecessaryInnerClass:
    active: true
  UnnecessaryLet:
    active: true
  UnnecessaryParentheses:
    active: true
    allowForUnclearPrecedence: false
  UntilInsteadOfRangeTo:
    active: true
  UnusedImports:
    active: true
  UnusedPrivateProperty:
    active: true
  ThrowsCount:
    active: false
  LoopWithTooManyJumpStatements:
    active: true
  SerialVersionUIDInSerializableClass:
    active: false
  ProtectedMemberInFinalClass:
    active: true
  UseCheckOrError:
    active: true
  OptionalUnit:
    active: true
  PreferToOverPairSyntax:
    active: true
  RedundantExplicitType:
    active: true
  TrailingWhitespace:
    active: true
  TrimMultilineRawString:
    active: true
    trimmingMethods:
      - 'trimIndent'
      - 'trimMargin'
  UnderscoresInNumericLiterals:
    active: true
    acceptableLength: 4
    allowNonStandardGrouping: false
  UnnecessaryAnnotationUseSiteTarget:
    active: true
  UnnecessaryBackticks:
    active: true
  UnnecessaryBracesAroundTrailingLambda:
    active: true
  UseDataClass:
    active: true
    allowVars: false
  UseEmptyCounterpart:
    active: true
  UseIfEmptyOrIfBlank:
    active: true
  UseLet:
    active: true
  UseSumOfInsteadOfFlatMapSize:
    active: true

coroutines:
  GlobalCoroutineUsage:
    # Keep false for now.
    active: false
  SuspendFunSwallowedCancellation:
    active: true
  SuspendFunWithCoroutineScopeReceiver:
    active: true

empty-blocks:
  EmptyFunctionBlock:
    active: false
  EmptySecondaryConstructor:
    active: true

potential-bugs:
  ImplicitDefaultLocale:
    active: true
  CastNullableToNonNullableType:
    active: true
  CastToNullableType:
    active: true
  Deprecation:
    active: true
  DontDowncastCollectionTypes:
    active: true
  ElseCaseInsteadOfExhaustiveWhen:
    active: true
  ExitOutsideMain:
    active: true
  ImplicitUnitReturnType:
    active: true
    allowExplicitReturnType: false
  MissingPackageDeclaration:
    active: true
    excludes: [ '**/*.kts' ]
  NullCheckOnMutableProperty:
    active: true
  NullableToStringCall:
    active: true
  PropertyUsedBeforeDeclaration:
    active: true
  UnconditionalJumpStatementInLoop:
    active: true
  UnnecessaryNotNullCheck:
    active: true

exceptions:
  TooGenericExceptionCaught:
    active: false
  SwallowedException:
    active: false
  ThrowingExceptionsWithoutMessageOrCause:
    active: true
  TooGenericExceptionThrown:
    active: true
  InstanceOfCheckForException:
    active: true
  ObjectExtendsThrowable:
    active: true

complexity:
  TooManyFunctions:
    active: false
  LongMethod:
    active: false
  LongParameterList:
    active: false
  CyclomaticComplexMethod:
    active: false
  NestedBlockDepth:
    active: false
  ComplexCondition:
    active: true
  LargeClass:
    active: true

naming:
  VariableNaming:
    active: true
  TopLevelPropertyNaming:
    active: true
  FunctionNaming:
    active: true
    ignoreAnnotated: [ 'Composable' ]
  LambdaParameterNaming:
    active: true
  NonBooleanPropertyPrefixedWithIs:
    active: true
  VariableMaxLength:
    active: true

performance:
  SpreadOperator:
    active: false
  CouldBeSequence:
    active: true
  UnnecessaryPartOfBinaryExpression:
    active: true

# Note: all rules for `comments` are disabled by default, but I put them here to be aware of their existence
comments:
  AbsentOrWrongFileLicense:
    active: true
    licenseTemplateFile: 'license.template'
    licenseTemplateIsRegex: true
  CommentOverPrivateFunction:
    active: false
  CommentOverPrivateProperty:
    active: false
  DeprecatedBlockTag:
    active: true
  EndOfSentenceFormat:
    active: true
  OutdatedDocumentation:
    active: true
    allowParamOnConstructorProperties: true
  UndocumentedPublicClass:
    active: false
  UndocumentedPublicFunction:
    active: false
  UndocumentedPublicProperty:
    active: false

Compose:
  CompositionLocalAllowlist:
    active: true
    # You can optionally define a list of CompositionLocals that are allowed here
    allowedCompositionLocals: LocalCompoundColors, LocalSnackbarDispatcher, LocalCameraPositionState, LocalTimelineItemPresenterFactories
  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
  PreviewAnnotationNaming:
    active: true
  PreviewPublic:
    active: true
    # You can optionally disable that only previews with @PreviewParameter are flagged
    previewPublicOnlyIfParams: false
  RememberMissing:
    active: true
  UnstableCollections:
    active: true
