# Sam note: this is taken from Chromium: https://github.com/chromium/chromium/blob/main/.clang-tidy
# with the following additions:
# performance-*
# portability-*
# clang-analyzer-*,
# openmp-exception-escape,
# modernize-use-nodiscard

# Updated: 1/10/2022

---
  Checks:          '-*,
                    bugprone-argument-comment,
                    bugprone-dangling-handle,
                    bugprone-inaccurate-erase,
                    bugprone-string-constructor,
                    bugprone-string-integer-assignment,
                    bugprone-unused-raii,
                    bugprone-use-after-move,
                    google-build-explicit-make-pair,
                    google-explicit-constructor,
                    google-readability-casting,
                    modernize-avoid-bind,
                    modernize-concat-nested-namespaces,
                    modernize-loop-convert,
                    modernize-make-shared,
                    modernize-make-unique,
                    modernize-redundant-void-arg,
                    modernize-replace-random-shuffle,
                    modernize-shrink-to-fit,
                    modernize-use-bool-literals,
                    modernize-use-default-member-init,
                    modernize-use-emplace,
                    modernize-use-equals-default,
                    modernize-use-equals-delete,
                    modernize-use-noexcept,
                    modernize-use-nullptr,
                    modernize-use-override,
                    modernize-use-transparent-functors,
                    readability-redundant-member-init,
                    performance-*,
                    portability-*,
                    clang-analyzer-*,
                    openmp-exception-escape,
                    modernize-use-nodiscard'
  CheckOptions:
    - key:          bugprone-dangling-handle.HandleClasses
      value:        ::std::basic_string_view;::std::span;::absl::string_view;::base::BasicStringPiece;::base::span
    - key:          bugprone-string-constructor.StringNames
      value:        ::std::basic_string;::std::basic_string_view;::base::BasicStringPiece
    - key:          modernize-use-default-member-init.UseAssignment
      value:        1
    # This relaxes modernize-use-emplace in some cases; we might want to make it
    # more aggressive in the future. See discussion on
    # https://groups.google.com/a/chromium.org/g/cxx/c/noMMTNYiM0w .
    - key:          modernize-use-emplace.IgnoreImplicitConstructors
      value:        1
    # - key:          modernize-use-nodiscard.ReplacementString
    #   value:        NODISCARD
...
