diff --git a/.gitignore b/.gitignore index 15a3772cd8..9a509228f3 100644 --- a/.gitignore +++ b/.gitignore @@ -32,8 +32,9 @@ build/bin/ source/tools/spirv/rules.json # Linting -cppcheck-error.log +compile_commands.json copyright-check-error.log +cppcheck-error.log # Files generated by running premake5 build/premake/.gccmachine.tmp diff --git a/source/tools/lint/clang-tidy/config.yml b/source/tools/lint/clang-tidy/config.yml new file mode 100644 index 0000000000..0864e3435f --- /dev/null +++ b/source/tools/lint/clang-tidy/config.yml @@ -0,0 +1,148 @@ +--- +Checks: + # Some version of clang-tidy leak system configuration, so clear all checks first. + - -* + - bugprone-* + - -bugprone-assignment-in-if-condition + - -bugprone-branch-clone + - -bugprone-casting-through-void + - -bugprone-copy-constructor-init + - -bugprone-crtp-constructor-accessibility + - -bugprone-derived-method-shadowing-base-method + - -bugprone-easily-swappable-parameters + - -bugprone-exception-escape + - -bugprone-fold-init-type + - -bugprone-implicit-widening-of-multiplication-result + - -bugprone-inaccurate-erase + - -bugprone-inc-dec-in-conditions + - -bugprone-incorrect-roundings + - -bugprone-integer-division + - -bugprone-invalid-enum-default-initialization + - -bugprone-macro-parentheses + - -bugprone-multi-level-implicit-pointer-conversion + - -bugprone-narrowing-conversions + - -bugprone-non-zero-enum-to-bool-conversion + - -bugprone-nondeterministic-pointer-iteration-order + - -bugprone-parent-virtual-call + - -bugprone-pointer-arithmetic-on-polymorphic-object + - -bugprone-random-generator-seed + - -bugprone-reserved-identifier + - -bugprone-return-const-ref-from-parameter + - -bugprone-signed-char-misuse + - -bugprone-std-namespace-modification + - -bugprone-string-integer-assignment + - -bugprone-suspicious-include + - -bugprone-suspicious-memory-comparison + - -bugprone-suspicious-semicolon + - -bugprone-suspicious-stringview-data-usage + - -bugprone-switch-missing-default-case + - -bugprone-throwing-static-initialization + - -bugprone-too-small-loop-variable + - -bugprone-unchecked-optional-access + - -bugprone-unhandled-self-assignment + - -bugprone-unsafe-functions + - -bugprone-unused-local-non-trivial-variable + - -bugprone-use-after-move + - cppcoreguidelines-* + - -cppcoreguidelines-avoid-c-arrays + - -cppcoreguidelines-avoid-const-or-ref-data-members + - -cppcoreguidelines-avoid-do-while + - -cppcoreguidelines-avoid-goto + - -cppcoreguidelines-avoid-magic-numbers + - -cppcoreguidelines-avoid-non-const-global-variables + - -cppcoreguidelines-avoid-reference-coroutine-parameters + - -cppcoreguidelines-explicit-virtual-functions + - -cppcoreguidelines-init-variables + - -cppcoreguidelines-interfaces-global-init + - -cppcoreguidelines-macro-to-enum + - -cppcoreguidelines-macro-usage + - -cppcoreguidelines-missing-std-forward + - -cppcoreguidelines-narrowing-conversions + - -cppcoreguidelines-no-malloc + - -cppcoreguidelines-noexcept-move-operations + - -cppcoreguidelines-noexcept-swap + - -cppcoreguidelines-non-private-member-variables-in-classes + - -cppcoreguidelines-owning-memory + - -cppcoreguidelines-prefer-member-initializer + - -cppcoreguidelines-pro-bounds-array-to-pointer-decay + - -cppcoreguidelines-pro-bounds-avoid-unchecked-container-access + - -cppcoreguidelines-pro-bounds-constant-array-index + - -cppcoreguidelines-pro-bounds-pointer-arithmetic + - -cppcoreguidelines-pro-type-const-cast + - -cppcoreguidelines-pro-type-cstyle-cast + - -cppcoreguidelines-pro-type-member-init + - -cppcoreguidelines-pro-type-reinterpret-cast + - -cppcoreguidelines-pro-type-static-cast-downcast + - -cppcoreguidelines-pro-type-union-access + - -cppcoreguidelines-pro-type-vararg + - -cppcoreguidelines-rvalue-reference-param-not-moved + - -cppcoreguidelines-slicing + - -cppcoreguidelines-special-member-functions + - -cppcoreguidelines-use-default-member-init + - -cppcoreguidelines-use-enum-class + - -cppcoreguidelines-virtual-class-destructor + - modernize-* + - -modernize-avoid-bind + - -modernize-avoid-c-arrays + - -modernize-avoid-c-style-cast + - -modernize-avoid-setjmp-longjmp + - -modernize-avoid-variadic-functions + - -modernize-concat-nested-namespaces + - -modernize-deprecated-headers + - -modernize-loop-convert + - -modernize-macro-to-enum + - -modernize-make-shared + - -modernize-make-unique + - -modernize-min-max-use-initializer-list + - -modernize-pass-by-value + - -modernize-raw-string-literal + - -modernize-redundant-void-arg + - -modernize-return-braced-init-list + - -modernize-type-traits + - -modernize-use-auto + - -modernize-use-bool-literals + - -modernize-use-constraints + - -modernize-use-default-member-init + - -modernize-use-designated-initializers + - -modernize-use-emplace + - -modernize-use-equals-default + - -modernize-use-equals-delete + - -modernize-use-integer-sign-comparison + - -modernize-use-nodiscard + - -modernize-use-noexcept + - -modernize-use-nullptr + - -modernize-use-override + - -modernize-use-ranges + - -modernize-use-scoped-lock + - -modernize-use-starts-ends-with + - -modernize-use-std-numbers + - -modernize-use-trailing-return-type + - -modernize-use-transparent-functors + - -modernize-use-using + - performance-* + - -performance-avoid-endl + - -performance-enum-size + - -performance-faster-string-find + - -performance-for-range-copy + - -performance-inefficient-vector-operation + - -performance-move-const-arg + - -performance-move-constructor-init + - -performance-no-automatic-move + - -performance-no-int-to-ptr + - -performance-noexcept-move-constructor + - -performance-noexcept-swap + - -performance-type-promotion-in-math-fn + - -performance-unnecessary-copy-initialization + - -performance-unnecessary-value-param +WarningsAsErrors: '' +HeaderFileExtensions: + - h +ImplementationFileExtensions: + - cpp +HeaderFilterRegex: '.*' +ExcludeHeaderFilterRegex: '.*third_party.*' +FormatStyle: none +User: 'clang-tidy' +CheckOptions: {} +SystemHeaders: false +... diff --git a/source/tools/lint/clang-tidy/run-clang-tidy.sh b/source/tools/lint/clang-tidy/run-clang-tidy.sh new file mode 100755 index 0000000000..d930091a7e --- /dev/null +++ b/source/tools/lint/clang-tidy/run-clang-tidy.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +if [ "$1" = '--list' ]; then + clang-tidy --list-checks -checks='*' + exit +fi + +if [ "$1" = '--fix' ]; then + fix=-fix + shift +fi + +./libraries/source/premake-core/bin/premake5 --file=build/premake/premake5.lua --minimal-flags --cc-config=Release compilecommands + +jq 'map(select(.file | (test(".*source/third_party.*") | not) and (test(".*generated.*") | not) and (test(".*test.*") | not) ))' compile_commands.json >compile_commands_filtered.json +mv compile_commands_filtered.json compile_commands.json + +if [ $# -eq 0 ]; then + run-clang-tidy -quiet -config-file=./source/tools/lint/clang-tidy/config.yml +else + # shellcheck disable=SC2086 + IFS=',' run-clang-tidy -quiet ${fix} -checks="$*" +fi