-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
.clang-tidy
156 lines (150 loc) · 6.6 KB
/
.clang-tidy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# 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'
# # 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-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$'