# 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-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', '-cert-dcl16-c', '-cert-dcl37-c', '-cert-dcl51-cpp', '-cert-err58-cpp', '-cert-msc32-c', '-cert-msc51-cpp', '-cert-oop54-cpp', '-cert-oop57-cpp', '-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-default-member-init', '-modernize-use-emplace', '-modernize-use-nodiscard', '-modernize-use-trailing-return-type', '-performance-inefficient-string-concatenation', '-performance-no-int-to-ptr', '-performance-avoid-endl', '-performance-unnecessary-value-param', '-portability-simd-intrinsics', '-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-simplify-boolean-expr', '-readability-suspicious-call-argument', '-readability-uppercase-literal-suffix', '-readability-use-anyofallof', '-zircon-*', # These are new in clang-18, and we have to sort them out: '-readability-avoid-nested-conditional-operator', '-modernize-use-designated-initializers', '-performance-enum-size', '-readability-redundant-inline-specifier', '-readability-redundant-member-init', '-bugprone-crtp-constructor-accessibility', '-bugprone-suspicious-stringview-data-usage', '-bugprone-multi-level-implicit-pointer-conversion', '-cert-err33-c', # This is a good check, but clang-tidy crashes, see https://github.com/llvm/llvm-project/issues/91872 '-modernize-use-constraints', # https://github.com/abseil/abseil-cpp/issues/1667 '-clang-analyzer-optin.core.EnumCastOutOfRange' ] 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