---
# Enable ALL the things! Except not really
# cppcoreguidelines-avoid-magic-numbers/readability-magic-numbers: covers to many simply cases
# modernize-use-trailing-return-type: purely stylistic suggestion
# readability-identifier-length: not needed
# bugprone-easily-swappable-parameters: covers to many simple cases
# cppcoreguidelines-macro-usage: reduced to a minimum
# bugprone-macro-parentheses: false positive
# readability-function-cognitive-complexity: multiple if/else branches necessary to cover all use cases
# cppcoreguidelines-non-private-member-variables-in-classes: same as misc-non-private-member-variables-in-classes
# misc-non-private-member-variables-in-classes: allowed since classes are intended for single threading
# cppcoreguidelines-pro-type-union-access: allowed since it is used because of performance and compile-time reasons
# readability-else-after-return: allowed since if no else compile-time flow check fails and no optimization in debug
# bugprone-exception-escape: to many false positives
# cppcoreguidelines-pro-bounds-pointer-arithmetic: performance in debug
# cppcoreguidelines-pro-bounds-constant-array-index:: performance
Checks: >
  bugprone-*,
  concurrency-*,
  cppcoreguidelines-*,
  clang-analyzer-*,
  misc-*,
  modernize-*,
  performance-*,
  portability-*,
  readability-*,
  -clang-analyzer-osx*,
  -clang-analyzer-llvm*,
  -clang-analyzer-optin*,
  -clang-analyzer-unix*,
  -clang-analyzer-valist*,
  -clang-diagnostic-ignored-optimization-argument,
  -cppcoreguidelines-avoid-magic-numbers,
  -readability-magic-numbers,
  -modernize-use-trailing-return-type,
  -readability-identifier-length,
  -bugprone-easily-swappable-parameters,
  -cppcoreguidelines-macro-usage,
  -bugprone-macro-parentheses,
  -readability-function-cognitive-complexity,
  -cppcoreguidelines-non-private-member-variables-in-classes,
  -misc-non-private-member-variables-in-classes,
  -cppcoreguidelines-pro-type-union-access,
  -readability-else-after-return,
  -bugprone-exception-escape,
  -cppcoreguidelines-pro-bounds-pointer-arithmetic,
  -cppcoreguidelines-pro-bounds-constant-array-index,

WarningsAsErrors: ''

CheckOptions:
  - key: readability-identifier-naming.AbstractClassCase
    value: 'lower_case'
  - key: readability-identifier-naming.ClassCase
    value: 'lower_case'
  - key: readability-identifier-naming.ClassConstantCase
    value: 'lower_case'
  - key: readability-identifier-naming.ClassMemberCase
    value: 'lower_case'
  - key: readability-identifier-naming.ClassMethodCase
    value: 'lower_case'
  - key: readability-identifier-naming.ConstantCase
    value: 'lower_case'
  - key: readability-identifier-naming.ConstantParameterCase
    value: 'lower_case'
  - key: readability-identifier-naming.ConstantPointerParameterCase
    value: 'lower_case'
  - key: readability-identifier-naming.ConstexprFunctionCase
    value: 'lower_case'
  - key: readability-identifier-naming.ConstexprMethodCase
    value: 'lower_case'
  - key: readability-identifier-naming.ConstexprVariableCase
    value: 'lower_case'
  - key: readability-identifier-naming.EnumCase
    value: 'lower_case'
  - key: readability-identifier-naming.EnumConstantCase
    value: 'lower_case'
  - key: readability-identifier-naming.FunctionCase
    value: 'lower_case'
  - key: readability-identifier-naming.GlobalConstantCase
    value: 'lower_case'
  - key: readability-identifier-naming.GlobalConstantPointerCase
    value: 'lower_case'
  - key: readability-identifier-naming.GlobalFunctionCase
    value: 'lower_case'
  - key: readability-identifier-naming.GlobalPointerCase
    value: 'lower_case'
  - key: readability-identifier-naming.GlobalVariableCase
    value: 'lower_case'
  - key: readability-identifier-naming.InlineNamespaceCase
    value: 'lower_case'
  - key: readability-identifier-naming.LocalConstantCase
    value: 'lower_case'
  - key: readability-identifier-naming.LocalConstantPointerCase
    value: 'lower_case'
  - key: readability-identifier-naming.LocalPointerCase
    value: 'lower_case'
  - key: readability-identifier-naming.LocalVariableCase
    value: 'lower_case'
  - key: readability-identifier-naming.MacroDefinitionCase
    value: 'UPPER_CASE'
  - key: readability-identifier-naming.MemberCase
    value: 'lower_case'
  - key: readability-identifier-naming.MethodCase
    value: 'lower_case'
  - key: readability-identifier-naming.NamespaceCase
    value: 'lower_case'
  - key: readability-identifier-naming.ParameterCase
    value: 'lower_case'
  - key: readability-identifier-naming.ParameterPackCase
    value: 'lower_case'
  - key: readability-identifier-naming.PointerParameterCase
    value: 'lower_case'
  - key: readability-identifier-naming.PrivateMemberCase
    value: 'lower_case'
  - key: readability-identifier-naming.PrivateMemberSuffix
    value: '_'
  - key: readability-identifier-naming.PrivateMethodCase
    value: 'lower_case'
  - key: readability-identifier-naming.ProtectedMemberCase
    value: 'lower_case'
  - key: readability-identifier-naming.ProtectedMemberSuffix
    value: '_'
  - key: readability-identifier-naming.ProtectedMethodCase
    value: 'lower_case'
  - key: readability-identifier-naming.PublicMemberCase
    value: 'lower_case'
  - key: readability-identifier-naming.PublicMethodCase
    value: 'lower_case'
  - key: readability-identifier-naming.ScopedEnumConstantCase
    value: 'lower_case'
  - key: readability-identifier-naming.StaticConstantCase
    value: 'lower_case'
  - key: readability-identifier-naming.StaticVariableCase
    value: 'lower_case'
  - key: readability-identifier-naming.StructCase
    value: 'lower_case'
  - key: readability-identifier-naming.TemplateParameterCase
    value: 'CamelCase'
  - key: readability-identifier-naming.TypeTemplateParameterIgnoredRegexp
    value: 'expr-type' # see https://github.com/llvm/llvm-project/issues/46097
  - key: readability-identifier-naming.TemplateTemplateParameterCase
    value: 'CamelCase'
  - key: readability-identifier-naming.TypeAliasCase
    value: 'lower_case'
  - key: readability-identifier-naming.TypedefCase
    value: 'lower_case'
  - key: readability-identifier-naming.TypeTemplateParameterCase
    value: 'CamelCase'
  - key: readability-identifier-naming.UnionCase
    value: 'lower_case'
  - key: readability-identifier-naming.ValueTemplateParameterCase
    value: 'CamelCase'
  - key: readability-identifier-naming.VariableCase
    value: 'lower_case'
  - key: readability-identifier-naming.VirtualMethodCase
    value: 'lower_case'
...
