# Disabled some clang-analyzer static checks, need some more investigation.
# TODO(hzeller) fix and re-enable clang-analyzer checks.
# TODO(hzeller) Looking over magic numbers might be good, but probably
#               not worthwhile hard-failing
# TODO(hzeller) Explore anofalloff suggestions.
#
# readability-make-member-function-const is great, but it also suggests that
#    in cases where we return a non-const pointer. So good to check, not by
#    default.
#
# readability-qualified-auto is useful in general, however it suggests
#    to convert iterators (e.g. std::string_view::begin()) to the pointer it
#    returns; however since the iterator is implementation defined, this is not
#    a valid assertion. Running the check every now and then manually and
#    fixing all the non-iterator cases is useful though. Off by default.
#
# misc-const-correctness: useful, but it seems to be overzealous at times.
#
# modernize-make-unique: mostly correct, but wants to also replace .reset()
#                         which is a more readable way than assign.
#
# misc-include-cleaner: we do not exclude it here, as it is useful in itself
#                       locally running clang tidy checks (and potentially language
#                       server support); but since code is not 'clean' yet, we
#                       exclude it in the CI run.
#       Config: don't flag *_linter_test_utils.h as they define a test
#       template spezialization that clang-tidy fails to see is necessary.
#
# NOTE: Below, there must be no comments, otherwise clang tidy silently ignores
#       rules... (ask me how I know).
###
Checks: >
  clang-diagnostic-*,
  clang-analyzer-*,
  -clang-analyzer-core.NonNullParamChecker,
  -clang-analyzer-cplusplus.InnerPointer,
  -clang-analyzer-optin.core.EnumCastOutOfRange,
  -clang-analyzer-optin.performance.Padding,
  abseil-*,
  -abseil-no-namespace,
  readability-*,
  -readability-avoid-nested-conditional-operator,
  -readability-avoid-unconditional-preprocessor-if,
  -readability-braces-around-statements,
  -readability-convert-member-functions-to-static,
  -readability-function-cognitive-complexity,
  -readability-identifier-length,
  -readability-implicit-bool-conversion,
  -readability-isolate-declaration,
  -readability-magic-numbers,
  -readability-make-member-function-const,
  -readability-math-missing-parentheses,
  -readability-named-parameter,
  -readability-qualified-auto,
  -readability-redundant-access-specifiers,
  -readability-simplify-boolean-expr,
  -readability-static-definition-in-anonymous-namespace,
  -readability-uppercase-literal-suffix,
  -readability-use-anyofallof,
  google-*,
  -google-readability-avoid-underscore-in-googletest-name,
  -google-readability-casting,
  -google-readability-todo,
  performance-*,
  -performance-avoid-endl,
  -performance-enum-size,
  bugprone-*,
  -bugprone-branch-clone,
  -bugprone-easily-swappable-parameters,
  -bugprone-exception-escape,
  -bugprone-inc-dec-in-conditions,
  -bugprone-macro-parentheses,
  -bugprone-move-forwarding-reference,
  -bugprone-narrowing-conversions,
  -bugprone-suspicious-missing-comma,
  modernize-*,
  -modernize-avoid-bind,
  -modernize-avoid-c-arrays,
  -modernize-concat-nested-namespaces,
  -modernize-make-shared,
  -modernize-make-unique,
  -modernize-pass-by-value,
  -modernize-raw-string-literal,
  -modernize-return-braced-init-list,
  -modernize-type-traits,
  -modernize-use-auto,
  -modernize-use-emplace,
  -modernize-use-nodiscard,
  -modernize-use-trailing-return-type,
  -modernize-use-transparent-functors,
  misc-*,
  -misc-const-correctness,
  -misc-no-recursion,
  -misc-non-private-member-variables-in-classes,
  -misc-redundant-expression,
  -misc-unused-parameters,
  -misc-use-anonymous-namespace,

CheckOptions:
  - key:    misc-include-cleaner.IgnoreHeaders
    value:  .*-linter-test-utils\.h
