mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 09:10:13 +01:00
Some `google-` prefixed rules have been renamed to rules without the prefix. The `google-` prefix still remains as an alias to these new rules. Since we turn on the `google-` prefix rules and use those in NOLINT expressions, disable the new aliased names. Otherwise we have to put both names in NOLINT expressions.
206 lines
8.7 KiB
YAML
206 lines
8.7 KiB
YAML
# 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: '*'
|
|
|
|
Checks:
|
|
# 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-deprecated-headers'
|
|
- '-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-trailing-comma'
|
|
- '-readability-use-anyofallof'
|
|
|
|
# These are copies of older google- prefixed rules that have been moved
|
|
# out of that prefix, but the google- prefix names still exist as aliases to
|
|
# these. We enable the google- prefix rules and use those in our NOLINT
|
|
# expressions, so we disable the newer aliased rules.
|
|
#
|
|
# Alias for google-explicit-constructor.
|
|
- '-misc-explicit-constructor'
|
|
# Alias for google-readability-casting.
|
|
- '-modernize-avoid-c-style-cast'
|
|
|
|
# Warns when we have multiple empty cases in switches, which we do for comment
|
|
# reasons.
|
|
- '-bugprone-branch-clone'
|
|
# We use CRTP inheritence widely and across distant areas of the codebase,
|
|
# which makes maintaining friend lists for the constructors frustrating.
|
|
- '-bugprone-crtp-constructor-accessibility'
|
|
# We shadow methods with CRTP, instead of using virtual, such as for Print().
|
|
- '-bugprone-derived-method-shadowing-base-method'
|
|
# 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'
|
|
# We have File class types in different namespaces and we forward declare it,
|
|
# but don't find this to be problematic.
|
|
- '-bugprone-forward-declaration-namespace'
|
|
# Doesn't respect `[[clang::enum_extensibility(open)]]`.
|
|
- '-bugprone-invalid-enum-default-initialization'
|
|
# 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'
|
|
# We return const references from value stores.
|
|
- '-bugprone-return-const-ref-from-parameter'
|
|
# Complains about reasonable code like `1 << 20` and would push us away from
|
|
# our integer type C++ style rules.
|
|
- '-bugprone-signed-bitwise'
|
|
# 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'
|
|
# We use multiple inheritence without virtual extensively.
|
|
- '-misc-multiple-inheritance'
|
|
# 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'
|
|
# We aren't using the ranges library due to performance concerns.
|
|
- '-modernize-use-ranges'
|
|
# Low value compared to the engineering cost.
|
|
- '-performance-enum-size'
|
|
# 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'
|
|
# Allows naming styles we don't use, and has errors on our use of `_1`, `_2`
|
|
# to have multiple unnamed vars in a destructuring declaration.
|
|
- '-readability-identifier-naming'
|
|
# Warns on use of CARBON_KIND() and can't use NOLINT effectively inside a
|
|
# macro.
|
|
- '-readability-inconsistent-ifelse-braces'
|
|
# 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'
|
|
# We generally do want to collapse if statements, and ask for it in review.
|
|
# But this check ignores when ifs are nested to place comments above/below
|
|
# the nested if block. And when the outer if block is also initializing a
|
|
# variable. There are more than a handful of cases where we want to do this,
|
|
# especially working with LLVM apis like dyn_cast.
|
|
- '-readability-redundant-nested-if'
|
|
# Broken, wants to remove parens from `*(p + 1)` and `("Foo" + s).str()`.
|
|
# TODO: Re-enable once https://github.com/llvm/llvm-project/issues/192435 and
|
|
# related bugs are fixed.
|
|
- '-readability-redundant-parentheses'
|
|
# Warns when callers use similar names as different parameters.
|
|
- '-readability-suspicious-call-argument'
|
|
# Low value check, and it's a stylistic choice to use `#if defined(...)` when
|
|
# paired with `#elif defined(...)`.
|
|
- '-readability-use-concise-preprocessor-directives'
|
|
|
|
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
|
|
# Headers re-open LLVM and Clang namespaces to forward-declare their types,
|
|
# which is much cheaper to compile than including their headers.
|
|
- key: readability-identifier-naming.NamespaceIgnoredRegexp
|
|
value: '^(clang|llvm)$'
|
|
- 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$'
|
|
|
|
# Don't require writing a return type on lambdas.
|
|
- key: modernize-use-trailing-return-type.TransformLambdas
|
|
value: none
|
|
|
|
# Use lines rather than statements to measure function size, because
|
|
# for readability purposes we care about the code as written, before
|
|
# preprocessing.
|
|
- key: readability-function-size.StatementThreshold
|
|
value: none
|
|
- key: readability-function-size.LineThreshold
|
|
# Chose 800 to match the default for StatementThreshold.
|
|
value: 800
|