# Detekt Configuration Standard (Kotlin 2.0+)
# Aligns with kotlin/CODING.md rules, size caps, and safety invariants

build:
  maxIssues: 0
  excludeCorrectable: false

complexity:
  active: true
  LongMethod:
    active: true
    threshold: 50                         # Soft cap 50 lines per function
  LargeClass:
    active: true
    threshold: 150                        # Soft cap 150 lines per class/interface
  LongParameterList:
    active: true
    functionThreshold: 3                  # Max 3 parameters (warns on 4+)
    constructorThreshold: 7
    ignoreDefaultParameters: true
  NestedBlockDepth:
    active: true
    threshold: 3                          # Max nesting depth 3
  CyclomaticComplexMethod:
    active: true
    threshold: 10
  ComplexCondition:
    active: true
    threshold: 3

potential-bugs:
  active: true
  UnsafeCallOnNullableType:
    active: true                          # Zero !! in production code
  CastToNullableType:
    active: true
  AvoidReferentialEquality:
    active: true
  ImplicitDefaultLocale:
    active: true

coroutines:
  active: true
  GlobalCoroutineUsage:
    active: true                          # Ban GlobalScope
  RedundantSuspendModifier:
    active: true
  SleepInsteadOfDelay:
    active: true                          # Ban Thread.sleep in coroutines
  SuspendFunWithFlowReturnType:
    active: true

style:
  active: true
  MaxLineLength:
    active: true
    maxLineLength: 100
    excludePackageStatements: true
    excludeImportStatements: true
    excludeCommentStatements: true
  ForbiddenComment:
    active: false
  MagicNumber:
    active: true
    ignoreNumbers: ['-1', '0', '1', '2']
  ReturnCount:
    active: true
    max: 3
    excludedFunctions: ['equals']

naming:
  active: true
  VariableNaming:
    active: true
    variablePattern: '[a-z][A-Za-z0-9]*'
  FunctionNaming:
    active: true
    functionPattern: '[a-z][A-Za-z0-9]*'
  ClassNaming:
    active: true
    classPattern: '[A-Z][A-Za-z0-9]*'
