# List of rationales for check suppressions (where known).
# This have to precede the list because inline comments are not
# supported by clang-tidy.
#
#         -cppcoreguidelines-non-private-member-variables-in-classes,
#         -misc-non-private-member-variables-in-classes,
# We intend a gradual transition to conform to this guideline, but it
# is not practical to implement yet.
#
#         -readability-isolate-declaration,
# Declarations like "int a, b;" are readable. Some forms are not, and
# those might reasonably be suggested against during code review.
#
#         -cppcoreguidelines-avoid-c-arrays,
# C arrays are still necessary in many places with legacy code
#
#         -cppcoreguidelines-avoid-magic-numbers,
#         -readability-magic-numbers,
# We have many legitimate use cases for magic numbers
#
#         -cppcoreguidelines-macro-usage,
# We do use too many macros, and we should fix many of them, but there
# is no reasonable way to suppress the check e.g. in src/config.h and
# configuring the build is a major legitimate use of macros.
#
#         -cppcoreguidelines-narrowing-conversions,
#         -bugprone-narrowing-conversions
# We have many cases where int is converted to float and we don't care
# enough about such potential loss of precision to use explicit casts
# in large numbers of places.
#
#         -google-readability-avoid-underscore-in-googletest-name
# We need to use underscores for readability for our legacy types
# and command-line parameter names
#
#         -misc-no-recursion
# We have way too many functions and methods relying on recursion
#
#         -readability-static-accessed-through-instance
# Especially the GPU code uses this in many places.
#
#         -performance-type-promotion-in-math-fn
# Those warnings are in the gpu code and we shouldn't to worry about them.
#
#         -performance-enum-size
# We tend not to store a lot of enum values, so don't suffer much performance
# penalty from this.
#
#         -readability-identifier-length
# We use a lot of single-character identifiers (e.g. loop variables) and some
# others have domain significance (x, v, f, M, mu, phi, p, q) so we are never
# going to want to do the work to conform with this
#
#         -bugprone-assignment-in-if-condition
#         -bugprone-easily-swappable-parameters
#         -bugprone-empty-catch
#         -bugprone-implicit-widening-of-multiplication-result
#         -bugprone-multi-level-implicit-pointer-conversion
#         -bugprone-unchecked-optional-access
#         -bugprone-unsafe-functions
#         -bugprone-suspicious-memory-comparison
#         -bugprone-switch-missing-default-case
#         -bugprone-throw-keyword-missing
#         -bugprone-unused-return-value
#         -cppcoreguidelines-avoid-const-or-ref-data-members
#         -cppcoreguidelines-avoid-do-while
#         -cppcoreguidelines-macro-to-enum
#         -cppcoreguidelines-owning-memory
#         -cppcoreguidelines-prefer-member-initializer
#         -cppcoreguidelines-rvalue-reference-param-not-moved
#         -cppcoreguidelines-use-default-member-init
#         -google-readability-casting
#         -misc-header-include-cycle
#         -misc-include-cleaner
#         -misc-confusable-identifiers
#         -misc-const-correctness
#         -misc-use-anonymous-namespace
#         -modernize-use-emplace
#         -performance-avoid-endl
#         -performance-no-int-to-ptr
#         -readability-avoid-nested-conditional-operator
#         -readability-avoid-unconditional-preprocessor-if
#         -readability-cognitive-complexity
#         -readability-container-data-pointer
#         -readability-function-cognitive-complexity
#         -readability-make-member-function-const
#         -readability-non-const-parameter
#         -readability-redundant-casting
#         -readability-redundant-member-init
#         -readability-simplify-boolean-expr
#         -readability-static-definition-in-anonymous-namespace
#         -readability-suspicious-call-argument
#         -readability-uppercase-literal-suffix
# Bulk suppressions while updating to clang-tidy-18. Hopefully we can relax
# some of these later.
Checks:  clang-diagnostic-*,-clang-analyzer-*,-clang-analyzer-security.insecureAPI.strcpy,
         bugprone-*,misc-*,readability-*,performance-*,mpi-*,
         -readability-inconsistent-declaration-parameter-name,
         -readability-function-size,-readability-else-after-return,
         modernize-use-nullptr,modernize-use-emplace,
         modernize-make-unique,modernize-make-shared,
         modernize-avoid-bind,
         modernize-use-override,
         modernize-redundant-void-arg,modernize-use-bool-literals,
         cppcoreguidelines-*,-cppcoreguidelines-pro-*,-cppcoreguidelines-owning-memory,
         -cppcoreguidelines-no-malloc,-cppcoreguidelines-special-member-functions,
         -cppcoreguidelines-avoid-goto,
         google-*,-google-build-using-namespace,-google-explicit-constructor,
         -google-readability-function-size,-google-readability-todo,-google-runtime-int,
         -cppcoreguidelines-non-private-member-variables-in-classes,
         -misc-non-private-member-variables-in-classes,
         -readability-isolate-declaration,
         -cppcoreguidelines-avoid-c-arrays,
         -cppcoreguidelines-avoid-magic-numbers,
         -readability-magic-numbers,
         -cppcoreguidelines-macro-usage,
         -cppcoreguidelines-narrowing-conversions,
         -bugprone-narrowing-conversions,
         -google-readability-avoid-underscore-in-googletest-name,
         -cppcoreguidelines-init-variables,
         -misc-no-recursion,
         -readability-static-accessed-through-instance,
         -performance-type-promotion-in-math-fn,
         -performance-enum-size,
         -readability-identifier-length,
         -bugprone-assignment-in-if-condition,
         -bugprone-easily-swappable-parameters,
         -bugprone-empty-catch,
         -bugprone-implicit-widening-of-multiplication-result,
         -bugprone-multi-level-implicit-pointer-conversion,
         -bugprone-unchecked-optional-access,
         -bugprone-unsafe-functions,
         -bugprone-suspicious-memory-comparison,
         -bugprone-switch-missing-default-case,
         -bugprone-throw-keyword-missing,
         -bugprone-unused-return-value,
         -cppcoreguidelines-avoid-const-or-ref-data-members,
         -cppcoreguidelines-avoid-do-while,
         -cppcoreguidelines-macro-to-enum,
         -cppcoreguidelines-owning-memory,
         -cppcoreguidelines-prefer-member-initializer,
         -cppcoreguidelines-rvalue-reference-param-not-moved,
         -cppcoreguidelines-use-default-member-init,
         -google-readability-casting,
         -misc-header-include-cycle,
         -misc-include-cleaner,
         -misc-confusable-identifiers,
         -misc-const-correctness,
         -misc-use-anonymous-namespace,
         -modernize-use-emplace,
         -performance-avoid-endl,
         -performance-no-int-to-ptr,
         -readability-avoid-nested-conditional-operator,
         -readability-avoid-unconditional-preprocessor-if,
         -readability-cognitive-complexity,
         -readability-container-data-pointer,
         -readability-function-cognitive-complexity,
         -readability-make-member-function-const,
         -readability-non-const-parameter,
         -readability-redundant-casting,
         -readability-redundant-member-init,
         -readability-simplify-boolean-expr,
         -readability-static-definition-in-anonymous-namespace,
         -readability-suspicious-call-argument,
         -readability-uppercase-literal-suffix
HeaderFilterRegex: .*
CheckOptions:
  - key:           cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor
    value:         1
  - key:           modernize-make-unique.IncludeStyle
    value:         google
  - key:           modernize-make-shared.IncludeStyle
    value:         google
  - key:           readability-implicit-bool-conversion.AllowIntegerConditions
    value:         1
  - key:           readability-implicit-bool-conversion.AllowPointerConditions
    value:         1
  - key:           bugprone-dangling-handle.HandleClasses
    value:         std::basic_string_view; nonstd::sv_lite::basic_string_view
# Permit passing shard pointers by value for sink parameters
  - key:           performance-unnecessary-copy-initialization.AllowedTypes
    value:         shared_ptr
  - key:           performance-unnecessary-value-param.AllowedTypes
    value:         shared_ptr
