Checks: >
  # General Checks
  clang-diagnostic-*,
  misc-throw-by-value-catch-by-reference,
  misc-definitions-in-headers,
  llvm-header-guard,
  clang-analyzer-core.NonNullParamChecker,
  clang-analyzer-core.UndefinedBehavior,
  clang-analyzer-core.BitwiseShift,
  
  # Performance Checks
  performance-*,
  performance-inefficient-vector-operation,
  
  # Modernization
  modernize-deprecated-ios-base-aliases,
  modernize-loop-convert,
  modernize-make-shared,
  modernize-make-unique,
  modernize-pass-by-value,
  modernize-raw-string-literal,
  modernize-redundant-void-arg,
  modernize-replace-auto-ptr,
  modernize-replace-disallow-copy-and-assign-macro,
  modernize-return-braced-init-list,
  modernize-use-auto,
  modernize-use-bool-literals,
  modernize-use-equals-default,
  modernize-use-emplace,
  modernize-use-equals-delete,
  modernize-use-noexcept,
  modernize-use-nullptr,
  modernize-use-override,
  modernize-use-using,
  modernize-deprecated-headers,
  
  # Google Style Guide
  google-explicit-constructor,
  google-build-using-namespace,
  google-runtime-int,
  google-global-names-in-headers,
  
  # Readability
  readability-braces-around-statements,
  readability-container-size-empty,
  #  readability-identifier-naming,
  #  readability-magic-numbers,
  readability-redundant-member-init,           # Detect redundant member initialization

  # HICPP and Portability
  hicpp-exception-baseclass
  portability-restrict-system-includes
  
  # Disabled/Suppressed Checks
  -bugprone-branch-clone,
  -bugprone-macro-parentheses,
  -bugprone-signed-char-misuse,
  -bugprone-misplaced-widening-cast,
  -bugprone-sizeof-expression,
  -bugprone-narrowing-conversions,
  -bugprone-unchecked-optional-access,       # Unchecked access to std::optional, which could cause runtime crashes
  -bugprone-dynamic-static-initializers,     # Detects dynamic initializers for static variables
  -bugprone-implicit-widening-of-multiplication-result,  # Implicit widening of multiplication result
  -bugprone-too-small-loop-variable,         # Loop variable might not be large enough to iterate correctly
  -bugprone-exception-escape,                # Exceptions escaping from destructors or non-throwing functions
  -bugprone-unused-return-value,             # Ignoring return values of functions that require checks
  -bugprone-integer-division,                # Detects cases of integer division truncating results
  -bugprone-parent-virtual-call,             # Detects when a virtual call in the base class is skipped unintentionally
  -bugprone-forward-declaration-namespace,   # Issues with forward declarations inside namespaces
  -bugprone-assignment-in-if-condition,      # Assignment in an `if` condition; often an error
  -bugprone-not-null-terminated-result,      # Missing null-termination in strings
  -bugprone-spuriously-wake-up-functions,    # Misuse of condition variables in threading
  -bugprone-assert-side-effect,              # Side effects in assert statements (removed in release mode)
  -bugprone-copy-constructor-init,           # Wrong initialization order in copy constructors
  -bugprone-move-forwarding-reference,       # Misuse of `std::move` with forwarding references
  -bugprone-unused-raii,                     # Unused RAII objects that perform important operations in destructors
  -bugprone-undefined-memory-manipulation,   # Undefined behavior in memory manipulation functions
  -bugprone-floating-point-implicit-conversion, # Implicit conversion of floating-point values
  -bugprone-reserved-identifier,             # Use of reserved identifiers, which can clash with system headers

WarningsAsErrors: '*'

FormatStyle: none

ExtraArgs:
  - '-Wno-unknown-pragmas'
  - '-Wno-unused-command-line-argument'

CheckOptions:
  # Identifier Naming Rules
  - key: readability-identifier-naming.TypeTemplateParameterIgnoredRegexp
    value: expr-type
  - key: readability-identifier-naming.TypeTemplateParameterCase
    value: UPPER_CASE
  - key: readability-identifier-naming.TemplateTemplateParameterCase
    value: UPPER_CASE
  - key: readability-identifier-naming.ClassCase
    value: CamelCase
  - key: readability-identifier-naming.EnumCase
    value: CamelCase
  - key: readability-identifier-naming.TypedefCase
    value: lower_case
  - key: readability-identifier-naming.TypedefSuffix
    value: _t
  - key: readability-identifier-naming.FunctionCase
    value: aNy_CasE
  - key: readability-identifier-naming.MemberCase
    value: lower_case
  - key: readability-identifier-naming.ParameterCase
    value: lower_case
  - key: readability-identifier-naming.PrivateMemberPrefix
    value: "m_"
  - key: readability-identifier-naming.PrivateMethodCase
    value: lower_case
  - key: readability-identifier-naming.ConstantCase
    value: aNy_CasE
  - key: readability-identifier-naming.ConstantParameterCase
    value: lower_case
  - key: readability-identifier-naming.NamespaceCase
    value: lower_case
  - key: readability-identifier-naming.MacroDefinitionCase
    value: UPPER_CASE
  - key: readability-identifier-naming.StaticConstantCase
    value: UPPER_CASE
  - key: readability-identifier-naming.ClassConstantCase
    value: UPPER_CASE
  - key: readability-identifier-naming.EnumConstantCase
    value: UPPER_CASE
  - key: readability-identifier-naming.ConstexprVariableCase
    value: UPPER_CASE
  - key: readability-identifier-naming.StaticMemberCase
    value: UPPER_CASE
  - key: readability-identifier-naming.StaticMemberPrefix
    value: "S_"
  - key: readability-identifier-naming.VariableCase
    value: lower_case
