---
Checks: |
  -*,
  clang-analyzer-*,
  clang-diagnostic-*,
  bugprone-*,

  readability-identifier-naming,
  readability-braces-around-statements,
  readability-inconsistent-declaration-parameter-name,
  readability-magic-numbers,
  readability-make-member-function-const,
  readability-named-parameter,
  readability-non-const-parameter,
  readability-qualified-auto,
  readability-redundant-preprocessor,
  readability-simplify-boolean-expr,
  readability-simplify-subscript-expr,
  readability-static-definition-in-anonymous-namespace,
  readability-uniqueptr-delete-release,
  readability-string-compare,

  llvm-namespace-comment,
  misc-definitions-in-headers,
  misc-misplaced-const,
  misc-redundant-expression,
  misc-throw-by-value-catch-by-reference,

  modernize-deprecated-headers,
  modernize-loop-convert,
  modernize-make-shared,
  modernize-make-unique,
  modernize-redundant-void-arg,
  modernize-replace-random-shuffle,
  modernize-use-auto,
  modernize-use-bool-literals,
  modernize-use-emplace,
  modernize-use-noexcept,
  modernize-use-nullptr,

  performance-faster-string-find,
  performance-for-range-copy,
  performance-implicit-conversion-in-loop,
  performance-inefficient-algorithm,
  performance-move-const-arg
WarningsAsErrors: |
  clang-analyzer-*,
  clang-diagnostic-*,
  bugprone-*,
  readability-*,
  performance-*
AnalyzeTemporaryDtors: false
CheckOptions:
  - { key: readability-identifier-naming.NamespaceCase,             value: lower_case }
  - { key: readability-identifier-naming.UnionCase,                 value: lower_case }
  - { key: readability-identifier-naming.EnumCase,                  value: lower_case }
  - { key: readability-identifier-naming.ClassCase,                 value: lower_case }
  - { key: readability-identifier-naming.StructCase,                value: lower_case }
  - { key: readability-identifier-naming.MethodCase,                value: lower_case }
  - { key: readability-identifier-naming.MemberCase,                value: lower_case }
  - { key: readability-identifier-naming.ClassConstantCase,         value: CamelCase }
  - { key: readability-identifier-naming.ClassConstantPrefix ,      value: k }
  - { key: readability-identifier-naming.PrivateMemberSuffix,       value: _  }
  - { key: readability-identifier-naming.ProtectedMemberSuffix,     value: _  }
  - { key: readability-identifier-naming.EnumCase,                  value: lower_case }
  - { key: readability-identifier-naming.FunctionCase,              value: lower_case }
  - { key: readability-identifier-naming.ParameterCase,             value: lower_case }
  - { key: readability-identifier-naming.VariableCase,              value: lower_case }
  - { key: readability-identifier-naming.TemplateParameterCase,     value: CamelCase }
  - { key: readability-identifier-naming.MacroDefinitionCase,       value: UPPER_CASE }
  - { key: readability-identifier-naming.GlobalConstantCase,        value: UPPER_CASE }
  - { key: readability-identifier-naming.GlobalConstantPointerCase, value: UPPER_CASE }
  - { key: readability-identifier-naming.EnumConstantCase,          value: lower_case }
  - { key: readability-identifier-naming.ScopedEnumConstantCase,    value: lower_case }

  - { key: readability-magic-numbers.IgnorePowersOf2IntegerValues,      value: true }
  - { key: readability-implicit-bool-conversion.AllowPointerConditions, value: true }
  - { key: readability-inconsistent-declaration-parameter-name.Strict,  value: true }

  - { key: llvm-namespace-comment.ShortNamespaceLines,       value: 5 }
  - { key: modernize-use-auto.MinTypeNameLength,             value: 15 }
  - { key: misc-definitions-in-headers.HeaderFileExtensions, value: "h,hh,hpp,hxx,ipp" }
...
