mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-30 19:42:00 +00:00
177 lines
7.1 KiB
YAML
177 lines
7.1 KiB
YAML
# To run clang-tidy from CMake, build ClickHouse with -DENABLE_CLANG_TIDY=1. To show all warnings, it is
|
|
# recommended to pass "-k0" to Ninja.
|
|
|
|
# Enable all checks + disable selected checks. Feel free to remove disabled checks from below list if
|
|
# a) the new check is not controversial (this includes many checks in readability-* and google-*) or
|
|
# b) too noisy (checks with > 100 new warnings are considered noisy, this includes e.g. cppcoreguidelines-*).
|
|
|
|
HeaderFilterRegex: '^.*/(base|src|programs|utils)/.*(h|hpp)$'
|
|
|
|
Checks: [
|
|
'*',
|
|
|
|
'-abseil-*',
|
|
|
|
'-altera-*',
|
|
|
|
'-android-*',
|
|
|
|
'-bugprone-assignment-in-if-condition',
|
|
'-bugprone-branch-clone',
|
|
'-bugprone-easily-swappable-parameters',
|
|
'-bugprone-exception-escape',
|
|
'-bugprone-forward-declaration-namespace',
|
|
'-bugprone-implicit-widening-of-multiplication-result',
|
|
'-bugprone-multi-level-implicit-pointer-conversion',
|
|
'-bugprone-narrowing-conversions',
|
|
'-bugprone-not-null-terminated-result',
|
|
'-bugprone-reserved-identifier', # useful but too slow, TODO retry when https://reviews.llvm.org/rG1c282052624f9d0bd273bde0b47b30c96699c6c7 is merged
|
|
'-bugprone-unchecked-optional-access',
|
|
'-bugprone-crtp-constructor-accessibility',
|
|
'-bugprone-suspicious-stringview-data-usage',
|
|
|
|
'-cert-dcl16-c',
|
|
'-cert-dcl37-c',
|
|
'-cert-dcl51-cpp',
|
|
'-cert-err58-cpp',
|
|
'-cert-msc32-c',
|
|
'-cert-msc51-cpp',
|
|
'-cert-oop54-cpp',
|
|
'-cert-oop57-cpp',
|
|
'-cert-err33-c', # Misreports on clang-19: it warns about all functions containing 'remove' in the name, not only about the standard library.
|
|
|
|
'-clang-analyzer-optin.performance.Padding',
|
|
|
|
'-clang-analyzer-unix.Malloc',
|
|
|
|
'-cppcoreguidelines-*', # impractical in a codebase as large as ClickHouse, also slow
|
|
|
|
'-darwin-*',
|
|
|
|
'-fuchsia-*',
|
|
|
|
'-google-build-using-namespace',
|
|
'-google-readability-braces-around-statements',
|
|
'-google-readability-casting',
|
|
'-google-readability-function-size',
|
|
'-google-readability-namespace-comments',
|
|
'-google-readability-todo',
|
|
|
|
'-hicpp-avoid-c-arrays',
|
|
'-hicpp-avoid-goto',
|
|
'-hicpp-braces-around-statements',
|
|
'-hicpp-explicit-conversions',
|
|
'-hicpp-function-size',
|
|
'-hicpp-member-init',
|
|
'-hicpp-move-const-arg',
|
|
'-hicpp-multiway-paths-covered',
|
|
'-hicpp-named-parameter',
|
|
'-hicpp-no-array-decay',
|
|
'-hicpp-no-assembler',
|
|
'-hicpp-no-malloc',
|
|
'-hicpp-signed-bitwise',
|
|
'-hicpp-special-member-functions',
|
|
'-hicpp-uppercase-literal-suffix',
|
|
'-hicpp-use-auto',
|
|
'-hicpp-use-emplace',
|
|
'-hicpp-vararg',
|
|
|
|
'-linuxkernel-*',
|
|
|
|
'-llvm-*',
|
|
|
|
'-llvmlibc-*',
|
|
|
|
'-openmp-*',
|
|
|
|
'-misc-const-correctness',
|
|
'-misc-include-cleaner', # useful but far too many occurrences
|
|
'-misc-no-recursion',
|
|
'-misc-non-private-member-variables-in-classes',
|
|
'-misc-confusable-identifiers', # useful but slooo
|
|
'-misc-use-anonymous-namespace',
|
|
|
|
'-modernize-avoid-c-arrays',
|
|
'-modernize-concat-nested-namespaces',
|
|
'-modernize-macro-to-enum',
|
|
'-modernize-pass-by-value',
|
|
'-modernize-return-braced-init-list',
|
|
'-modernize-use-auto',
|
|
'-modernize-use-constraints', # This is a good check, but clang-tidy crashes, see https://github.com/llvm/llvm-project/issues/91872
|
|
'-modernize-use-default-member-init',
|
|
'-modernize-use-emplace',
|
|
'-modernize-use-nodiscard',
|
|
'-modernize-use-trailing-return-type',
|
|
'-modernize-use-designated-initializers',
|
|
|
|
'-performance-enum-size',
|
|
'-performance-inefficient-string-concatenation',
|
|
'-performance-no-int-to-ptr',
|
|
'-performance-avoid-endl',
|
|
'-performance-unnecessary-value-param',
|
|
|
|
'-portability-simd-intrinsics',
|
|
|
|
'-readability-avoid-nested-conditional-operator',
|
|
'-readability-avoid-unconditional-preprocessor-if',
|
|
'-readability-braces-around-statements',
|
|
'-readability-convert-member-functions-to-static',
|
|
'-readability-else-after-return',
|
|
'-readability-function-cognitive-complexity',
|
|
'-readability-function-size',
|
|
'-readability-identifier-length',
|
|
'-readability-identifier-naming', # useful but too slow
|
|
'-readability-implicit-bool-conversion',
|
|
'-readability-isolate-declaration',
|
|
'-readability-magic-numbers',
|
|
'-readability-named-parameter',
|
|
'-readability-redundant-declaration',
|
|
'-readability-redundant-inline-specifier', # useful but incompatible with __attribute((always_inline))__ (aka. ALWAYS_INLINE, base/base/defines.h).
|
|
# ALWAYS_INLINE only has an effect if combined with `inline`: https://godbolt.org/z/Eefd74qdM
|
|
'-readability-redundant-member-init', # Useful but triggers another problem. Imagine a struct S with multiple String members. Structs are often instantiated via designated
|
|
# initializer S s{.s1 = [...], .s2 = [...], [...]}. In this case, compiler warning `missing-field-initializers` requires to specify all members which are not in-struct
|
|
# initialized (example: s1 in struct S { String s1; String s2{};}; is not in-struct initialized, therefore it must be specified at instantiation time). As explicitly
|
|
# specifying all members is tedious for large structs, `missing-field-initializers` makes programmers initialize as many members as possible in-struct. Clang-tidy
|
|
# warning `readability-redundant-member-init` does the opposite thing, both are not compatible with each other.
|
|
'-readability-simplify-boolean-expr',
|
|
'-readability-suspicious-call-argument',
|
|
'-readability-uppercase-literal-suffix',
|
|
'-readability-use-anyofallof',
|
|
|
|
'-zircon-*'
|
|
]
|
|
|
|
WarningsAsErrors: '*'
|
|
|
|
ExtraArgs:
|
|
# clang-tidy 17 started to complain (for unknown reasons) that various pragmas are unknown ("clang-diagnostic-unknown-pragmas").
|
|
# This is technically a compiler error, not a clang-tidy error. We could litter the code base with more pragmas that suppress
|
|
# this error but it is better to pass the following flag to the compiler:
|
|
- '-Wno-unknown-pragmas'
|
|
- '-Wno-unused-command-line-argument' # similar issue
|
|
|
|
CheckOptions:
|
|
readability-identifier-naming.ClassCase: CamelCase
|
|
readability-identifier-naming.EnumCase: CamelCase
|
|
readability-identifier-naming.LocalVariableCase: lower_case
|
|
readability-identifier-naming.StaticConstantCase: aNy_CasE
|
|
readability-identifier-naming.MemberCase: lower_case
|
|
readability-identifier-naming.PrivateMemberPrefix: ''
|
|
readability-identifier-naming.ProtectedMemberPrefix: ''
|
|
readability-identifier-naming.PublicMemberCase: lower_case
|
|
readability-identifier-naming.MethodCase: camelBack
|
|
readability-identifier-naming.PrivateMethodPrefix: ''
|
|
readability-identifier-naming.ProtectedMethodPrefix: ''
|
|
readability-identifier-naming.ParameterPackCase: lower_case
|
|
readability-identifier-naming.StructCase: CamelCase
|
|
readability-identifier-naming.TemplateTemplateParameterCase: CamelCase
|
|
readability-identifier-naming.TemplateParameterCase: lower_case
|
|
readability-identifier-naming.TypeTemplateParameterCase: CamelCase
|
|
readability-identifier-naming.TypedefCase: CamelCase
|
|
readability-identifier-naming.UnionCase: CamelCase
|
|
modernize-loop-convert.UseCxx20ReverseRanges: false
|
|
performance-move-const-arg.CheckTriviallyCopyableMove: false
|
|
# Workaround clang-tidy bug: https://github.com/llvm/llvm-project/issues/46097
|
|
readability-identifier-naming.TypeTemplateParameterIgnoredRegexp: expr-type
|
|
cppcoreguidelines-avoid-do-while.IgnoreMacros: true
|