Checks: >
  -*,
  readability-identifier-naming,
  google-*,
  bugprone-*,
  modernize-*,
  performance-*,
  -modernize-use-trailing-return-type,
  -modernize-raw-string-literal,
  -bugprone-easily-swappable-parameters,
  -performance-enum-size,
  -modernize-use-designated-initializers

# Headers are checked through the sources that include them.
HeaderFilterRegex: '.*/(src|include)/.*'

# Google C++ style, with the project's own rules for private members and methods.
CheckOptions:
  # types
  - { key: readability-identifier-naming.ClassCase,        value: CamelCase }
  - { key: readability-identifier-naming.StructCase,       value: CamelCase }
  - { key: readability-identifier-naming.EnumCase,         value: CamelCase }

  # functions: CamelCase, except snake_case accessors (get/set) on public methods and
  # camelBack private methods.
  - { key: readability-identifier-naming.FunctionCase,     value: CamelCase }
  - { key: readability-identifier-naming.PublicMethodCase, value: CamelCase }
  - { key: readability-identifier-naming.PublicMethodIgnoredRegexp, value: '^(set_[a-z0-9_]+|[a-z0-9_]+)$' }
  - { key: readability-identifier-naming.PrivateMethodCase, value: camelBack }
  - { key: readability-identifier-naming.ProtectedMethodCase, value: camelBack }

  # namespaces
  - { key: readability-identifier-naming.NamespaceCase,    value: lower_case }

  # variables
  - { key: readability-identifier-naming.VariableCase,     value: lower_case }
  - { key: readability-identifier-naming.ParameterCase,    value: lower_case }
  - { key: readability-identifier-naming.LocalConstantCase, value: lower_case }
  - { key: readability-identifier-naming.LocalConstantPointerCase, value: lower_case }
  - { key: readability-identifier-naming.ConstantParameterCase, value: lower_case }

  # class / struct members
  - { key: readability-identifier-naming.MemberCase,       value: lower_case }
  - { key: readability-identifier-naming.PrivateMemberSuffix,   value: "_" }
  - { key: readability-identifier-naming.ProtectedMemberSuffix, value: "_" }
  - { key: readability-identifier-naming.PublicMemberSuffix,    value: "" }
  - { key: readability-identifier-naming.ConstantMemberCase,    value: lower_case }
  - { key: readability-identifier-naming.ConstantMemberSuffix,  value: "_" }

  # compile-time and namespace-scope constants: kCamelCase
  - { 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.StaticConstantCase,      value: CamelCase }
  - { key: readability-identifier-naming.StaticConstantPrefix,    value: k }
  - { key: readability-identifier-naming.ClassConstantCase,       value: CamelCase }
  - { key: readability-identifier-naming.ClassConstantPrefix,     value: k }
