Checks: >
  readability-*,
  modernize-*,
  performance-*,
  bugprone-unchecked-optional-access,
  bugprone-sizeof-expression,
  bugprone-suspicious-missing-comma,
  bugprone-suspicious-index,
  bugprone-undefined-memory-manipulation,
  bugprone-use-after-move,
  bugprone-out-of-bound-access,
  -readability-identifier-length,
  -readability-magic-numbers,
  -bugprone-narrowing-conversions,
  -performance-enum-size,
  -performance-inefficient-string-concatenation,
  -bugprone-integer-division,
  -bugprone-easily-swappable-parameters,

WarningsAsErrors: '*'
# Solo incluir archivos de tu código fuente
HeaderFilterRegex: '^source/(sections|ui)/.*'
FormatStyle: file

CheckOptions:
  # Variables locales en snake_case
  - { key: readability-identifier-naming.VariableCase, value: lower_case }

  # Miembros privados en snake_case con sufijo _
  - { key: readability-identifier-naming.PrivateMemberCase, value: lower_case }
  - { key: readability-identifier-naming.PrivateMemberSuffix, value: _ }

  # Miembros protegidos en snake_case con sufijo _
  - { key: readability-identifier-naming.ProtectedMemberCase, value: lower_case }
  - { key: readability-identifier-naming.ProtectedMemberSuffix, value: _ }

  # Miembros públicos en snake_case (sin sufijo)
  - { key: readability-identifier-naming.PublicMemberCase, value: lower_case }

  # Namespaces en CamelCase
  - { key: readability-identifier-naming.NamespaceCase, value: CamelCase }

  # Variables estáticas privadas como miembros privados
  - { key: readability-identifier-naming.StaticVariableCase, value: lower_case }
  - { key: readability-identifier-naming.StaticVariableSuffix, value: _ }
  
  # Constantes estáticas sin sufijo
  - { key: readability-identifier-naming.StaticConstantCase, value: UPPER_CASE }

  # Constantes globales en UPPER_CASE
  - { key: readability-identifier-naming.GlobalConstantCase, value: UPPER_CASE }

  # Variables constexpr globales en UPPER_CASE
  - { key: readability-identifier-naming.ConstexprVariableCase, value: UPPER_CASE }

  # Constantes locales en UPPER_CASE
  - { key: readability-identifier-naming.LocalConstantCase, value: UPPER_CASE }

  # Constexpr miembros en UPPER_CASE (sin sufijo)
  - { key: readability-identifier-naming.ConstexprMemberCase, value: UPPER_CASE }

  # Constexpr miembros privados/protegidos con sufijo _
  - { key: readability-identifier-naming.ConstexprMethodCase, value: UPPER_CASE }

  # Clases, structs y enums en CamelCase
  - { key: readability-identifier-naming.ClassCase, value: CamelCase }
  - { key: readability-identifier-naming.StructCase, value: CamelCase }
  - { key: readability-identifier-naming.EnumCase, value: CamelCase }

  # Valores de enums en UPPER_CASE
  - { key: readability-identifier-naming.EnumConstantCase, value: UPPER_CASE }

  # Métodos en camelBack (sin sufijos)
  - { key: readability-identifier-naming.MethodCase, value: camelBack }
  - { key: readability-identifier-naming.PrivateMethodCase, value: camelBack }
  - { key: readability-identifier-naming.ProtectedMethodCase, value: camelBack }
  - { key: readability-identifier-naming.PublicMethodCase, value: camelBack }

  # Funciones en camelBack
  - { key: readability-identifier-naming.FunctionCase, value: camelBack }

  # Parámetros en lower_case
  - { key: readability-identifier-naming.ParameterCase, value: lower_case }