| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- # Part of the Carbon Language project, under the Apache License v2.0 with LLVM
- # Exceptions. See /LICENSE for license information.
- # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- ---
- # Get colors when outputting through `bazel build --config=clang-tidy`.
- UseColor: true
- # This is necessary for `--config=clang-tidy` to catch errors.
- WarningsAsErrors: '*'
- # TODO: clang-tidy-16 doesn't support this format; it's retained for comments.
- # Switch once we update the minimum version.
- #
- # # We turn on all of a few categories by default.
- # - '-*'
- # - 'bugprone-*'
- # - 'google-*'
- # - 'misc-*'
- # - 'modernize-*'
- # - 'performance-*'
- # - 'readability-*'
- #
- # # Disabled due to the implied style choices.
- # - '-misc-const-correctness'
- # - '-misc-include-cleaner'
- # - '-misc-use-anonymous-namespace'
- # - '-modernize-return-braced-init-list'
- # - '-modernize-use-default-member-init'
- # - '-modernize-use-integer-sign-comparison'
- # - '-modernize-use-emplace'
- # - '-readability-avoid-nested-conditional-operator'
- # - '-readability-convert-member-functions-to-static'
- # - '-readability-else-after-return'
- # - '-readability-identifier-length'
- # - '-readability-implicit-bool-conversion'
- # - '-readability-make-member-function-const'
- # - '-readability-math-missing-parentheses'
- # - '-readability-static-definition-in-anonymous-namespace'
- # - '-readability-use-anyofallof'
- #
- # # Warns when we have multiple empty cases in switches, which we do for comment
- # # reasons.
- # - '-bugprone-branch-clone'
- # # Frequently warns on multiple parameters of the same type.
- # - '-bugprone-easily-swappable-parameters'
- # # Finds issues like out-of-memory in main(). We don't use exceptions, so it's
- # # unlikely to find real issues.
- # - '-bugprone-exception-escape'
- # # Has false positives in places such as using an argument to declare a name,
- # # which cannot have parentheses. For our limited use of macros, this is a
- # # common conflict.
- # - '-bugprone-macro-parentheses'
- # # Conflicts with integer type C++ style.
- # - '-bugprone-narrowing-conversions'
- # # Has false positives for `enum_base.h`. Clang's built-in switch warnings
- # # cover most of our risk of bugs here.
- # - '-bugprone-switch-missing-default-case'
- # # In clang-tidy 16, has false positives on code like:
- # # while (auto name_ref = insts().Get(inst_id).TryAs<SemIR::NameRef>()) {
- # # inst_id = name_ref->value_id;
- # # ^ unchecked access to optional value
- # # }
- # - '-bugprone-unchecked-optional-access'
- # # Overlaps with `readability-function-size`.
- # - '-google-readability-function-size'
- # # Suggests usernames on TODOs, which we don't want.
- # - '-google-readability-todo'
- # # Extremely slow. TODO: Re-enable once
- # # https://github.com/llvm/llvm-project/issues/128797 is fixed.
- # - '-misc-confusable-identifiers'
- # # Overlaps with `-Wno-missing-prototypes`.
- # - '-misc-use-internal-linkage'
- # # Suggests `std::array`, which we could migrate to, but conflicts with the
- # # status quo.
- # - '-modernize-avoid-c-arrays'
- # # Warns on creation of SemIR typed insts, for which we do not currently want
- # # to use designated initialization.
- # - '-modernize-use-designated-initializers'
- # # Only fixes const methods, not non-const, which yields distracting results on
- # # accessors.
- # - '-modernize-use-nodiscard'
- # # Duplicates `modernize-pass-by-value`.
- # - '-performance-unnecessary-value-param'
- # # Warns on enums which use the `LastValue = Value` pattern if all the other
- # # discriminants aren't given an explicit value.
- # - '-readability-enum-initial-value'
- # # Warns too frequently.
- # - '-readability-function-cognitive-complexity'
- # # Warns in reasonably documented situations.
- # - '-readability-magic-numbers'
- # # Warns on `= {}` which is also used to indicate which fields do not need to
- # # be explicitly initialized in aggregate initialization.
- # - '-readability-redundant-member-init'
- # # Warns when callers use similar names as different parameters.
- # - '-readability-suspicious-call-argument'
- Checks:
- -*, bugprone-*, google-*, misc-*, modernize-*, performance-*, readability-*,
- -misc-const-correctness, -misc-include-cleaner, -misc-use-anonymous-namespace,
- -modernize-return-braced-init-list, -modernize-use-default-member-init,
- -modernize-use-integer-sign-comparison, -modernize-use-emplace,
- -readability-avoid-nested-conditional-operator,
- -readability-convert-member-functions-to-static,
- -readability-else-after-return, -readability-identifier-length,
- -readability-implicit-bool-conversion,
- -readability-make-member-function-const,
- -readability-math-missing-parentheses,
- -readability-static-definition-in-anonymous-namespace,
- -readability-use-anyofallof, -bugprone-branch-clone,
- -bugprone-easily-swappable-parameters, -bugprone-exception-escape,
- -bugprone-macro-parentheses, -bugprone-narrowing-conversions,
- -bugprone-switch-missing-default-case, -bugprone-unchecked-optional-access,
- -google-readability-function-size, -google-readability-todo,
- -misc-confusable-identifiers, -misc-use-internal-linkage,
- -modernize-avoid-c-arrays, -modernize-use-designated-initializers,
- -modernize-use-nodiscard, -performance-unnecessary-value-param,
- -readability-enum-initial-value, -readability-function-cognitive-complexity,
- -readability-magic-numbers, -readability-redundant-member-init,
- -readability-suspicious-call-argument
- CheckOptions:
- # Don't warn on structs; done by ignoring when there are only public members.
- - key: misc-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic
- value: true
- # CamelCase names.
- - key: readability-identifier-naming.ClassCase
- value: CamelCase
- - key: readability-identifier-naming.ClassConstantCase
- value: CamelCase
- - key: readability-identifier-naming.ConstexprVariableCase
- value: CamelCase
- - key: readability-identifier-naming.NamespaceCase
- value: CamelCase
- - key: readability-identifier-naming.StructCase
- value: CamelCase
- - key: readability-identifier-naming.TemplateParameterCase
- value: CamelCase
- - key: readability-identifier-naming.TypeAliasCase
- value: CamelCase
- - key: readability-identifier-naming.TypedefCase
- value: CamelCase
- - key: readability-identifier-naming.UnionCase
- value: CamelCase
- # lower_case names.
- - key: readability-identifier-naming.ClassMemberCase
- value: lower_case
- - key: readability-identifier-naming.ParameterCase
- value: lower_case
- - key: readability-identifier-naming.VariableCase
- value: lower_case
- # TODO: This is for explorer's use of LLVM casting support, so we should be
- # able to remove it once explorer is deleted.
- - key: readability-identifier-naming.MethodIgnoredRegexp
- value: '^classof$'
- # This erroneously fires in C++20 mode with LLVM 16 clang-tidy, due to:
- # https://github.com/llvm/llvm-project/issues/46097
- - key: readability-identifier-naming.TemplateParameterIgnoredRegexp
- value: '^expr-type$'
|