Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shuffle around yaml formatting in .clang-tidy #4690

Merged
merged 3 commits into from
Dec 17, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
214 changes: 109 additions & 105 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -8,110 +8,114 @@ UseColor: true
# This is necessary for `--config=clang-tidy` to catch errors.
WarningsAsErrors: '*'

# We turn on all `bugprone`, `google`, `modernize`, `performance`, and
# `readability` by default. A few `misc` are selectively enabled, and a few
# other checks are selectively disabled.
#
# Checks with nuanced reasons for disabling are:
#
# - `bugprone-branch-clone` warns when we have multiple empty cases in switches,
# which we do for comment reasons.
# - `bugprone-easily-swappable-parameters` frequently warns on multiple
# parameters of the same type.
# - `bugprone-exception-escape` finds issues like out-of-memory in main(). We
# don't use exceptions, so it's unlikely to find real issues.
# - `bugprone-macro-parentheses` 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-narrowing-conversions` conflicts with integer type C++ style.
# - `google-readability-todo` suggests usernames on TODOs, which we don't want.
# - `bugprone-switch-missing-default-case` has false positives for
# `enum_base.h`. Clang's built-in switch warnings cover most of our risk of
# bugs here.
# - `bugprone-unchecked-optional-access` 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
# }
# - `google-readability-function-size` overlaps with
# `readability-function-size`.
# - `modernize-avoid-c-arrays` suggests `std::array`, which we could migrate to,
# but conflicts with the status quo.
# - `modernize-use-designated-initializers` fires on creation of SemIR typed
# insts, for which we do not currently want to use designated initialization.
# - `modernize-use-nodiscard` is disabled because it only fixes const methods,
# not non-const, which yields distracting results on accessors.
# - `performance-unnecessary-value-param` duplicates `modernize-pass-by-value`.
# - `readability-enum-initial-value` warns on enums which use the
# `LastValue = Value` pattern if all the other discriminants aren't given an
# explicit value.
# - `readability-function-cognitive-complexity` warns too frequently.
# - `readability-magic-numbers` warns in reasonably documented situations.
# - `readability-redundant-member-init` warns on `= {}` which is also used to
# indicate which fields do not need to be explicitly initialized in aggregate
# initialization.
# - `readability-suspicious-call-argument` warns when callers use similar names
# as different parameters.
#
# Checks that are essentially style choices we don't apply are:
#
# - `modernize-return-braced-init-list`
# - `modernize-use-default-member-init`
# - `modernize-use-emplace`
# - `readability-convert-member-functions-to-static`
# - `readability-else-after-return`
# - `readability-identifier-length`
# - `readability-implicit-bool-conversion`
# - `readability-make-member-function-const`
# - `readability-static-definition-in-anonymous-namespace`
# - `readability-use-anyofallof`
Checks:
-*, bugprone-*, -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-*,
-google-readability-function-size, -google-readability-todo,
misc-definitions-in-headers, misc-misplaced-const, misc-redundant-expression,
misc-static-assert, misc-unconventional-assign-operator,
misc-uniqueptr-reset-release, misc-unused-*, modernize-*,
-modernize-avoid-c-arrays, -modernize-return-braced-init-list,
-modernize-use-default-member-init, -modernize-use-designated-initializers,
-modernize-use-emplace, -modernize-use-nodiscard, performance-*,
-performance-unnecessary-value-param, readability-*,
-readability-convert-member-functions-to-static,
-readability-else-after-return, -readability-enum-initial-value,
-readability-function-cognitive-complexity, -readability-identifier-length,
-readability-implicit-bool-conversion, -readability-magic-numbers,
-readability-make-member-function-const, -readability-redundant-member-init,
-readability-static-definition-in-anonymous-namespace,
-readability-suspicious-call-argument, -readability-use-anyofallof
# We turn on all of a few categories by default.
- '-*'
- 'bugprone-*'
- 'google-*'
- 'modernize-*'
- 'performance-*'
- 'readability-*'

# `misc` is selectively enabled because we want a minority of them.
- 'misc-definitions-in-headers'
- 'misc-misplaced-const'
- 'misc-redundant-expression'
- 'misc-static-assert'
- 'misc-unconventional-assign-operator'
- 'misc-uniqueptr-reset-release'
- 'misc-unused-*'

# Disabled due to the implied style choices.
- '-modernize-return-braced-init-list'
- '-modernize-use-default-member-init'
- '-modernize-use-emplace'
- '-readability-convert-member-functions-to-static'
- '-readability-else-after-return'
- '-readability-identifier-length'
- '-readability-implicit-bool-conversion'
- '-readability-make-member-function-const'
- '-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'
# 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'
CheckOptions:
- { 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 }
- { key: readability-identifier-naming.VariableCase, value: lower_case }
- { key: readability-identifier-naming.ParameterCase, value: lower_case }
- { key: readability-identifier-naming.ClassMemberCase, value: lower_case }
- {
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$',
}
- 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
- key: readability-identifier-naming.ClassMemberCase
value: lower_case
- key: readability-identifier-naming.ParameterCase
value: lower_case
- key: readability-identifier-naming.VariableCase
value: lower_case
- 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$'
Loading