#ExcludeHeaderFilterRegex: ^.*(lib\/).*

Checks: >
  #-*,
  # Enable groups:
  bugprone-*,
  cppcoreguidelines-*,
  clang-analyzer-*,
  ##hicpp-*,
  misc-*,
  modernize-*,
  performance-*,
  portability-*,
  readability-*,
  # Disable specific checks/warnings:
  -clang-analyzer-security.insecureAPI.strcpy,
  -clang-diagnostic-format-security,
  -cppcoreguidelines-avoid-c-arrays,
  -cppcoreguidelines-avoid-do-while,
  -cppcoreguidelines-avoid-goto,
  -cppcoreguidelines-avoid-magic-numbers,
  -cppcoreguidelines-no-malloc,
  -cppcoreguidelines-init-variables, # false positives
  -cppcoreguidelines-owning-memory,
  -cppcoreguidelines-prefer-member-initializer,
  -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
  #-cppcoreguidelines-pro-bounds-array-pointer-decay,
  -cppcoreguidelines-pro-bounds-pointer-arithmetic,
  -cppcoreguidelines-pro-bounds-constant-array-index,
  -cppcoreguidelines-pro-type-const-cast,   # we have some instances, and we should remove them...
  -cppcoreguidelines-pro-type-reinterpret-cast,
  -cppcoreguidelines-pro-type-union-access,
  -cppcoreguidelines-pro-type-vararg,
  -cppcoreguidelines-special-member-functions, # explicit move, copy contructors...
  ##-hicpp-use-auto, #duplicate
  ##-hicpp-braces-around-statements,
  ##-hicpp-vararg, #duplicate
  -misc-const-correctness, # temporary
  -misc-include-cleaner,
  -misc-non-private-member-variables-in-classes,
  -modernize-avoid-c-arrays,
  -modernize-use-auto,
  -modernize-use-trailing-return-type,
  -modernize-loop-convert,
  -modernize-macro-to-enum,
  -modernize-use-designated-initializers,
  -modernize-use-nodiscard,
  -modernize-use-using,
  -readability-braces-around-statements,
  -readability-delete-null-pointer,
  -readability-else-after-return,
  -readability-function-cognitive-complexity,
  -readability-identifier-length,
  -readability-identifier-naming,
  -readability-implicit-bool-conversion,
  -readability-inconsistent-declaration-parameter-name,
  -readability-magic-numbers,
  -readability-misleading-indentation, # to be enabled after the source is properly formatted
  -readability-simplify-boolean-expr,
  -readability-uppercase-literal-suffix,
  ##-misc-non-private-member-variables-in-classes,
  ##-readability-named-parameter,
  ##-readability-braces-around-statements,
  ##-readability-magic-numbers

  #-format security

# Turn all the warnings from the checks above into errors.
#WarningsAsErrors: "*"

CheckOptions:
#  - key: 'clang-analyzer-core.NonNullParamChecker:assert_like_macro'
#    value: 'DEBUG_ASSERT,ASSERT,ASSERT_ALWAYS'
  - key: 'clang-analyzer-config:noreturn_function'
    value: 'RaiseImmediateAbort,RaiseRecoverableAbort'
  - { 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.TemplateParameterCase,  value: CamelCase  }
  - { key: readability-identifier-naming.FunctionCase,           value: camelBack  }
  - { key: readability-identifier-naming.VariableCase,           value: camelBack  } # lower_case
  - { key: readability-identifier-naming.PrivateMemberPrefix,    value: m_         }
  - { key: readability-identifier-naming.ProtectedMemberPrefix,  value: m_         }
  - { key: readability-identifier-naming.MacroDefinitionCase,    value: UPPER_CASE }
  - { key: readability-identifier-naming.EnumConstantCase,         value: UPPER_CASE}
  #- { key: readability-identifier-naming.EnumConstantPrefix,       value: k         }
  - { key: readability-identifier-naming.ScopedEnumConstantCase,   value: CamelCase }
  - { key: readability-identifier-naming.ScopedEnumConstantPrefix, value: k         }
  - { key: readability-identifier-naming.ConstexprVariableCase,    value: CamelCase }
  - { key: readability-identifier-naming.ConstexprVariablePrefix,  value: k         }
  - { key: readability-identifier-naming.GlobalConstantCase,       value: CamelCase }
  - { key: readability-identifier-naming.GlobalConstantPrefix,     value: k         }
  - { key: readability-identifier-naming.MemberConstantCase,       value: CamelCase }
  - { key: readability-identifier-naming.MemberConstantPrefix,     value: k         }
  - { key: readability-identifier-naming.StaticConstantCase,       value: CamelCase }
  - { key: readability-identifier-naming.StaticConstantPrefix,     value: k         }
