---
# KernelForge C++ Static Analysis Configuration
# Moderate checks for code quality tailored for numerical/scientific computing
# - Allows pointer arithmetic and C-style casts (common in BLAS/LAPACK interfaces)
# - Allows deferred initialization and magic numbers (common in numerical code)
# - Enforces modern C++ practices where appropriate

Checks: >
  bugprone-*,
  clang-analyzer-*,
  cppcoreguidelines-*,
  modernize-*,
  performance-*,
  readability-*,
  misc-*,
  -bugprone-easily-swappable-parameters,
  -bugprone-implicit-widening-of-multiplication-result,
  -modernize-use-trailing-return-type,
  -modernize-avoid-c-arrays,
  -modernize-use-auto,
  -readability-identifier-length,
  -readability-function-cognitive-complexity,
  -readability-braces-around-statements,
  -readability-magic-numbers,
  -cppcoreguidelines-avoid-magic-numbers,
  -cppcoreguidelines-pro-bounds-pointer-arithmetic,
  -cppcoreguidelines-pro-type-reinterpret-cast,
  -cppcoreguidelines-pro-type-const-cast,
  -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
  -cppcoreguidelines-avoid-const-or-ref-data-members,
  -cppcoreguidelines-owning-memory,
  -cppcoreguidelines-no-malloc,
  -cppcoreguidelines-init-variables,
  -performance-no-int-to-ptr

CheckOptions:
  # Naming conventions - snake_case for most things
  - key: readability-identifier-naming.NamespaceCase
    value: lower_case
  - key: readability-identifier-naming.ClassCase
    value: CamelCase
  - key: readability-identifier-naming.StructCase
    value: CamelCase
  - key: readability-identifier-naming.FunctionCase
    value: snake_case
  - key: readability-identifier-naming.VariableCase
    value: snake_case
  - key: readability-identifier-naming.ParameterCase
    value: snake_case
  - key: readability-identifier-naming.ConstantCase
    value: UPPER_CASE
  - key: readability-identifier-naming.EnumConstantCase
    value: UPPER_CASE
  - key: readability-identifier-naming.GlobalConstantCase
    value: UPPER_CASE

  # Make some checks less aggressive
  - key: readability-function-size.LineThreshold
    value: '200'
  - key: readability-function-size.StatementThreshold
    value: '150'
  - key: cppcoreguidelines-avoid-do-while.MaxStatements
    value: '10'

WarningsAsErrors: ''
HeaderFilterRegex: 'src/.*\.(h|hpp)$'
FormatStyle: file  # Use .clang-format
