Checks: '
  -*,
  readability-*,
  readability-identifier-naming,
  performance-*,
  bugprone-*,
  cppcoreguidelines-*,

  -readability-magic-numbers,
  -readability-identifier-length,
  -readability-convert-member-functions-to-static,
  -readability-uppercase-literal-suffix,
  
  -bugprone-narrowing-conversions,
  -bugprone-easily-swappable-parameters,
  -bugprone-signed-char-misuse,

  -cppcoreguidelines-avoid-c-arrays,
  -cppcoreguidelines-avoid-magic-numbers,
  -cppcoreguidelines-avoid-non-const-global-variables,
  '
WarningsAsErrors: ''
HeaderFilterRegex: '(src|include)\/.*\.h$'
FormatStyle: 'file'
CheckOptions:
  # Require argument names to match exactly (instead of allowing a name to be a prefix/suffix of another)
  # Note: 'true' is expected by clang-tidy 12+ but '1' is used for compatibility with older versions
  - key: readability-inconsistent-declaration-parameter-name.Strict
    value: 1

  # === Naming conventions ===
  
  # Classes: PascalCase
  - key: readability-identifier-naming.ClassCase
    value: CamelCase
  
  # Structs: PascalCase
  - key: readability-identifier-naming.StructCase
    value: CamelCase
  # Allow legacy decompilation struct names (UnkStruct_XXXX, struct_D_XXXX, struct_XXXX_entry)
  - key: readability-identifier-naming.StructIgnoredRegexp
    value: '^(UnkStruct_?[0-9A-Fa-fxX]+|struct_D_[0-9A-Fa-fxX]+|struct_[0-9A-Fa-f]+_entry)$'
  
  # Enums: PascalCase
  - key: readability-identifier-naming.EnumCase
    value: CamelCase
  
  # Enum constants: UPPER_CASE (legacy C style)
  - key: readability-identifier-naming.EnumConstantCase
    value: UPPER_CASE
  
  # Namespaces: PascalCase
  - key: readability-identifier-naming.NamespaceCase
    value: CamelCase
  
  # Methods: PascalCase
  - key: readability-identifier-naming.MethodCase
    value: CamelCase
  
  # Parameters: camelCase
  - key: readability-identifier-naming.ParameterCase
    value: camelBack
  
  # Local variables: camelCase
  - key: readability-identifier-naming.LocalVariableCase
    value: camelBack
  
  # Global variables: camelCase with 'g' prefix
  - key: readability-identifier-naming.GlobalVariableCase
    value: CamelCase
  - key: readability-identifier-naming.GlobalVariablePrefix
    value: 'g'
  # Allow legacy decompilation names (D_XXXXXXXX) and boolean-like globals (bName)
  - key: readability-identifier-naming.GlobalVariableIgnoredRegexp
    value: '^(D_[0-9A-Fa-f]+|b[A-Z][a-zA-Z0-9]*)$'
  
  # Public members (structs and class public): camelCase without prefix
  - key: readability-identifier-naming.MemberCase
    value: camelBack
  # Allow legacy decompilation member names (unk_XX, unkXX, fill, pad)
  - key: readability-identifier-naming.MemberIgnoredRegexp
    value: '^(unk_?[0-9A-Fa-f]+|fill|pad[0-9]*)$'
  - key: readability-identifier-naming.PublicMemberCase
    value: camelBack
  - key: readability-identifier-naming.PublicMemberIgnoredRegexp
    value: '^(unk_?[0-9A-Fa-f]+|fill|pad[0-9]*)$'
  
  # Private members: camelCase with 'm' prefix
  - key: readability-identifier-naming.PrivateMemberCase
    value: CamelCase
  - key: readability-identifier-naming.PrivateMemberPrefix
    value: 'm'
  
  # Protected members: camelCase with 'm' prefix
  - key: readability-identifier-naming.ProtectedMemberCase
    value: CamelCase
  - key: readability-identifier-naming.ProtectedMemberPrefix
    value: 'm'
  
  # Static variables: camelCase with 's' prefix
  - key: readability-identifier-naming.StaticVariableCase
    value: CamelCase
  - key: readability-identifier-naming.StaticVariablePrefix
    value: 's'
  
  # Constants: UPPER_CASE
  - key: readability-identifier-naming.ConstantCase
    value: UPPER_CASE
  
  # Macros: UPPER_CASE
  - key: readability-identifier-naming.MacroDefinitionCase
    value: UPPER_CASE
  
  # Type aliases (typedef/using): PascalCase
  - key: readability-identifier-naming.TypeAliasCase
    value: CamelCase
  - key: readability-identifier-naming.TypedefCase
    value: CamelCase
  # Allow legacy decompilation typedef names (UnkStruct_XXXX, struct_D_XXXX, struct_XXXX_entry)
  - key: readability-identifier-naming.TypedefIgnoredRegexp
    value: '^(UnkStruct_?[0-9A-Fa-fxX]+|struct_D_[0-9A-Fa-fxX]+|struct_[0-9A-Fa-f]+_entry)$'
  
  # Template parameters: PascalCase
  - key: readability-identifier-naming.TemplateParameterCase
    value: CamelCase
