# Disable the following checks with reasons in parenthesis:
#
# -bugprone-macro-parentheses (inconsistent style)
# -google-readability-todo (potentially too restrictive)
# -misc-non-private-member-variables-in-classes (potentially too restrictive)
# -misc-unused-parameters (can be cleaned up in batch and enabled)
# -modernize-avoid-c-arrays (too restrictive)
# -modernize-concat-nested-namespaces (inconsistent style)
# -modernize-pass-by-value (too restrictive)
# -modernize-return-braced-init-list (inconsistent style)
# -modernize-use-emplace (more subtle behavior)
# -modernize-use-nodiscard (too much noise)
# -modernize-use-trailing-return-type (inconsistent style)
# -modernize-use-override (TODO(mwtian): re-enable after fixing existing derived classes)
# -modernize-avoid-bind (incorrect conversion)
# -modernize-loop-convert (more subtle behavior)
# -modernize-replace-disallow-copy-and-assign-macro (inconsistent style)
# -modernize-make-unique (doesn't work with private constructor)
# -modernize-make-shared (doesn't work with private constructor)
# Other readability-* rules (potentially too noisy, inconsistent style)
# Other rules not mentioned here or below (not yet evaluated)
#
# TODO: enable google-* and readability-* families of checks.
Checks: >
  abseil-*,
  bugprone-*,
  -bugprone-macro-parentheses,
  -bugprone-easily-swappable-parameters,
  -bugprone-narrowing-conversions,
  -bugprone-implicit-widening-of-multiplication-result,
  cert-*,
  cppcoreguidelines-*,
  -cppcoreguidelines-non-private-member-variables-in-classes,
  -cppcoreguidelines-narrowing-conversions,
  -cppcoreguidelines-avoid-magic-numbers,
  -cppcoreguidelines-avoid-do-while,
  google-*,
  -google-readability-todo,
  -google-default-arguments,
  misc-*,
  -misc-non-private-member-variables-in-classes,
  -misc-unused-parameters,
  -misc-include-cleaner,
  -misc-const-correctness,
  modernize-*,
  -modernize-concat-nested-namespaces,
  -modernize-return-braced-init-list,
  -modernize-use-nodiscard,
  -modernize-use-trailing-return-type,
  -modernize-avoid-bind,
  -modernize-loop-convert,
  performance-*,
  readability-braces-around-statements,
  readability-const-return-type,
  readability-container-contains,
  readability-container-data-pointer,
  readability-container-size-empty,
  readability-delete-null-pointer,
  readability-duplicate-include,
  readability-implicit-bool-conversion,
  readability-make-member-function-const,
  readability-misleading-indentation,
  readability-misplaced-array-index,
  readability-named-parameter,
  readability-non-const-parameter,
  readability-redundant-*,
  -readability-redundant-access-specifiers,
  readability-static-definition-in-anonymous-namespace,
  readability-string-compare,
  readability-suspicious-call-argument,

CheckOptions:
  # Reduce noisiness of the bugprone-narrowing-conversions check.
  - key:   bugprone-narrowing-conversions.IgnoreConversionFromTypes
    value: 'size_t;ptrdiff_t;size_type;difference_type'
  - key:   bugprone-narrowing-conversions.WarnOnEquivalentBitWidth
    value: 'false'
  - key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctionsWhenCopyIsDeleted
    value: 'true'
  - key: cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor
    value: 'true'
  - key: performance-move-const-arg.CheckTriviallyCopyableMove
    value: 'false'

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