---
# Enable ALL the things! Except not really
# misc-non-private-member-variables-in-classes: the options don't do anything
# modernize-use-nodiscard: too aggressive, attribute is situationally useful
Checks: "*,\
  -google-readability-todo,\
  -altera-*,\
  -fuchsia-*,\
  fuchsia-multiple-inheritance,\
  -llvm-header-guard,\
  -llvm-include-order,\
  -llvmlibc-*,\
  -modernize-use-nodiscard,\
  -misc-non-private-member-variables-in-classes"
WarningsAsErrors: ''
CheckOptions:
  - key: 'bugprone-argument-comment.StrictMode'
    value: 'true'
# Prefer using enum classes with 2 values for parameters instead of bools
  - key: 'bugprone-argument-comment.CommentBoolLiterals'
    value: 'true'
  - key: 'bugprone-misplaced-widening-cast.CheckImplicitCasts'
    value: 'true'
  - key: 'bugprone-sizeof-expression.WarnOnSizeOfIntegerExpression'
    value: 'true'
  - key: 'bugprone-suspicious-string-compare.WarnOnLogicalNotComparison'
    value: 'true'
  - key: 'readability-simplify-boolean-expr.ChainedConditionalReturn'
    value: 'true'
  - key: 'readability-simplify-boolean-expr.ChainedConditionalAssignment'
    value: 'true'
  - key: 'readability-uniqueptr-delete-release.PreferResetCall'
    value: 'true'
  - key: 'cppcoreguidelines-init-variables.MathHeader'
    value: '<cmath>'
  - key: 'cppcoreguidelines-narrowing-conversions.PedanticMode'
    value: 'true'
  - key: 'readability-else-after-return.WarnOnUnfixable'
    value: 'true'
  - key: 'readability-else-after-return.WarnOnConditionVariables'
    value: 'true'
  - key: 'readability-inconsistent-declaration-parameter-name.Strict'
    value: 'true'
  - key: 'readability-qualified-auto.AddConstToQualified'
    value: 'true'
  - key: 'readability-redundant-access-specifiers.CheckFirstDeclaration'
    value: 'true'
# These seem to be the most common identifier styles
  - 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.ConstantMemberCase'
    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.PrivateMemberPrefix'
    value: 'm_'
  - key: 'readability-identifier-naming.PrivateMethodCase'
    value: 'lower_case'
  - key: 'readability-identifier-naming.ProtectedMemberCase'
    value: 'lower_case'
  - key: 'readability-identifier-naming.ProtectedMemberPrefix'
    value: 'm_'
  - 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.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'
...