From c2243014cdf01f2c1d8c44b9d676b0ab4692b898 Mon Sep 17 00:00:00 2001 From: Johannes Schneider Date: Fri, 11 Apr 2025 10:57:34 +0200 Subject: [PATCH 1/4] Improve GitHub workflow for clang-tidy --- .clang-tidy | 41 +++++++++++ .github/workflows/static_code_analysis.yaml | 76 +++++++++++++-------- 2 files changed, 90 insertions(+), 27 deletions(-) create mode 100644 .clang-tidy diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 00000000..28e9cc81 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,41 @@ +Checks: + - clang-analyzer-* + - bugprone-* + - performance-* + - readability-* + - modernize-* + - cppcoreguidelines-* + - misc-* + - '-modernize-use-trailing-return-type' + - '-modernize-use-auto' + - '-modernize-use-using' + - '-modernize-use-nodiscard' + - '-cppcoreguidelines-avoid-do-while' + - '-cppcoreguidelines-macro-usage' + - '-cppcoreguidelines-pro-bounds-constant-array-index' + - '-cppcoreguidelines-pro-bounds-pointer-arithmetic' + - '-cppcoreguidelines-pro-type-union-access' + - '-readability-function-cognitive-complexity' + - '-llvmlibc-restrict-system-libc-headers' + - '-llvmlibc-implementation-in-namespace' + - '-altera-unroll-loops' + - '-misc-definitions-in-headers' + - '-readability-identifier-naming' + - '-readability-identifier-length' + +HeaderFilterRegex: '.*\.(cpp|h)$' +FormatStyle: file + +CheckOptions: + - key: 'modernize-loop-convert.MaxCopySize' + value: '16' + - key: 'readability-identifier-naming.VariableCase' + value: 'camelBack' + - key: 'readability-identifier-naming.ClassCase' + value: 'CamelCase' + - key: 'readability-identifier-naming.FunctionCase' + value: 'camelBack' + - key: 'cppcoreguidelines-avoid-magic-numbers.IgnoreEnums' + value: '1' + - key: 'cppcoreguidelines-avoid-magic-numbers.IgnoreOctalLiterals' + value: '1' diff --git a/.github/workflows/static_code_analysis.yaml b/.github/workflows/static_code_analysis.yaml index d933ce43..873c97c1 100644 --- a/.github/workflows/static_code_analysis.yaml +++ b/.github/workflows/static_code_analysis.yaml @@ -1,4 +1,4 @@ -name: Static code analysis (clang-tidy) +name: Static code analysis (clang-tidy) on: push: @@ -12,26 +12,39 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install dependencies + # Cache Vulkan SDK + - name: Cache Vulkan SDK + id: cache-vulkan + uses: actions/cache@v4 + with: + path: vulkan_sdk + key: vulkan-sdk-1.4.309.0 + + # Install system dependencies + - name: Install system dependencies run: | sudo apt update - sudo apt install -y clang-15 clang-tidy-15 cmake ninja-build libc++-15-dev libc++abi-15-dev - - - name: Set clang-tidy version - run: echo "CLANG_TIDY=clang-tidy-15" >> $GITHUB_ENV + sudo apt install -y clang-15 clang-tidy-15 cmake parallel libc++-15-dev libc++abi-15-dev - - name: Prepare Vulkan SDK + # Download Vulkan SDK only if not cached + - name: Download Vulkan SDK + if: steps.cache-vulkan.outputs.cache-hit != 'true' run: | curl -LS -o vulkansdk.tar.xz https://sdk.lunarg.com/sdk/download/1.4.309.0/linux/vulkansdk-linux-x86_64-1.4.309.0.tar.xz mkdir -p vulkan_sdk tar xf vulkansdk.tar.xz -C vulkan_sdk - export VULKAN_SDK=$GITHUB_WORKSPACE/vulkan_sdk/1.4.309.0/x86_64 - echo "VULKAN_SDK=$VULKAN_SDK" >> $GITHUB_ENV - echo "PATH=$VULKAN_SDK/bin:$PATH" >> $GITHUB_ENV - echo "LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV - echo "VK_ICD_FILENAMES=$VULKAN_SDK/etc/vulkan/icd.d" >> $GITHUB_ENV - echo "VK_LAYER_PATH=$VULKAN_SDK/etc/vulkan/layer.d" >> $GITHUB_ENV + # Set environment variables for Clang and Vulkan SDK + - name: Set environment variables + run: | + echo "CLANG_TIDY=clang-tidy-15" >> $GITHUB_ENV + echo "VULKAN_SDK=${GITHUB_WORKSPACE}/vulkan_sdk/1.4.309.0/x86_64" >> $GITHUB_ENV + echo "PATH=${GITHUB_WORKSPACE}/vulkan_sdk/1.4.309.0/x86_64/bin:$PATH" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/vulkan_sdk/1.4.309.0/x86_64/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV + echo "VK_ICD_FILENAMES=${GITHUB_WORKSPACE}/vulkan_sdk/1.4.309.0/x86_64/etc/vulkan/icd.d" >> $GITHUB_ENV + echo "VK_LAYER_PATH=${GITHUB_WORKSPACE}/vulkan_sdk/1.4.309.0/x86_64/etc/vulkan/layer.d" >> $GITHUB_ENV + + # Configure the project with CMake - name: Configure with CMake run: | cmake -S . -B build \ @@ -40,18 +53,27 @@ jobs: -DCMAKE_C_COMPILER=clang-15 \ -DVMA_BUILD_SAMPLES=YES - - name: Run Clang-Tidy + # List files to analyze + - name: Check the files found for clang-tidy + run: | + find src include \ + -path '*/_deps/*' -prune -o \ + -path '*/build/*' -prune -o \ + \( -name '*.cpp' -o -name '*.hpp' \) -print + + # Run clang-tidy in parallel + - name: Run clang-tidy + run: | + find src include \ + -path '*/_deps/*' -prune -o \ + -path '*/build/*' -prune -o \ + \( -name '*.cpp' -o -name '*.hpp' \) -print0 | + parallel -0 clang-tidy -p build {} | + tee output || true + + # Summarize warnings + - name: Summarize clang-tidy warnings run: | - find . -name '*.cpp' | xargs clang-tidy-15 -checks='*, \ - -modernize-use-trailing-return-type, \ - -cppcoreguidelines-macro-usage, \ - -modernize-use-auto, \ - -modernize-use-using \ - -modernize-use-nodiscard \ - -altera-unroll-loops \ - -misc-definitions-in-headers \ - -cppcoreguidelines-pro-bounds-pointer-arithmetic \ - -readability-function-cognitive-complexity \ - -llvmlibc-restrict-system-libc-headers \ - -cppcoreguidelines-pro-type-union-access' \ - -header-filter='.*vk_mem_alloc\.h' -p build || true + grep -hEo '\[[a-z0-9]+-[a-z0-9-]+\]' output \ + | sort | uniq -c | sort -nr \ + | sed 's/[][]//g' || true From 8d1ffce1caab192ef2d2fe889dab06352e124054 Mon Sep 17 00:00:00 2001 From: IAmNotHanni Date: Fri, 9 May 2025 12:53:28 +0200 Subject: [PATCH 2/4] Improve clang-tidy configuration --- .clang-tidy | 50 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 28e9cc81..676a79fd 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,27 +1,47 @@ Checks: - - clang-analyzer-* - - bugprone-* - - performance-* - - readability-* - - modernize-* - - cppcoreguidelines-* - - misc-* - - '-modernize-use-trailing-return-type' - - '-modernize-use-auto' - - '-modernize-use-using' - - '-modernize-use-nodiscard' + - '*' + - '-altera-unroll-loops' + - '-bugprone-easily-swappable-parameters' + - '-bugprone-sizeof-expression' + - '-clang-diagnostic-error' + - '-clang-diagnostic-note' - '-cppcoreguidelines-avoid-do-while' - '-cppcoreguidelines-macro-usage' + - '-cppcoreguidelines-no-malloc' + - '-cppcoreguidelines-owning-memory' + - '-cppcoreguidelines-pro-bounds-array-to-pointer-decay' - '-cppcoreguidelines-pro-bounds-constant-array-index' - '-cppcoreguidelines-pro-bounds-pointer-arithmetic' + - '-cppcoreguidelines-pro-type-const-cast' + - '-cppcoreguidelines-pro-type-reinterpret-cast' - '-cppcoreguidelines-pro-type-union-access' - - '-readability-function-cognitive-complexity' - - '-llvmlibc-restrict-system-libc-headers' + - '-cppcoreguidelines-pro-type-vararg' + - '-fuchsia-default-arguments-calls' + - '-fuchsia-default-arguments-declarations' + - '-fuchsia-overloaded-operator' + - '-google-readability-todo' + - '-hicpp-uppercase-literal-suffix' + - '-hicpp-vararg' - '-llvmlibc-implementation-in-namespace' - - '-altera-unroll-loops' + - '-llvmlibc-restrict-system-libc-headers' + - '-llvmlibc-*' + - '-misc-const-correctness' - '-misc-definitions-in-headers' - - '-readability-identifier-naming' + - '-misc-no-recursion' + - '-misc-static-assert' + - '-misc-unused-parameters' + - '-modernize-use-auto' + - '-modernize-use-nodiscard' + - '-modernize-use-trailing-return-type' + - '-modernize-use-using' + - '-performance-enum-size' + - '-readability-braces-around-statements' + - '-readability-function-cognitive-complexity' - '-readability-identifier-length' + - '-readability-identifier-naming' + - '-readability-implicit-bool-conversion' + - '-readability-simplify-boolean-expr' + - '-readability-static-accessed-through-instance' HeaderFilterRegex: '.*\.(cpp|h)$' FormatStyle: file From 97a0838712c8445748ebadc6441619e85e0a5b23 Mon Sep 17 00:00:00 2001 From: IAmNotHanni Date: Fri, 9 May 2025 13:06:54 +0200 Subject: [PATCH 3/4] Further improve clang-tidy ignore list of warnings --- .clang-tidy | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 676a79fd..00986e57 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,10 +1,14 @@ Checks: - - '*' + - clang-analyzer-* + - bugprone-* + - performance-* + - readability-* + - modernize-* + - cppcoreguidelines-* + - misc-* - '-altera-unroll-loops' - '-bugprone-easily-swappable-parameters' - '-bugprone-sizeof-expression' - - '-clang-diagnostic-error' - - '-clang-diagnostic-note' - '-cppcoreguidelines-avoid-do-while' - '-cppcoreguidelines-macro-usage' - '-cppcoreguidelines-no-malloc' @@ -12,19 +16,10 @@ Checks: - '-cppcoreguidelines-pro-bounds-array-to-pointer-decay' - '-cppcoreguidelines-pro-bounds-constant-array-index' - '-cppcoreguidelines-pro-bounds-pointer-arithmetic' - - '-cppcoreguidelines-pro-type-const-cast' - - '-cppcoreguidelines-pro-type-reinterpret-cast' - '-cppcoreguidelines-pro-type-union-access' - '-cppcoreguidelines-pro-type-vararg' - - '-fuchsia-default-arguments-calls' - - '-fuchsia-default-arguments-declarations' - - '-fuchsia-overloaded-operator' - - '-google-readability-todo' - - '-hicpp-uppercase-literal-suffix' - - '-hicpp-vararg' - '-llvmlibc-implementation-in-namespace' - '-llvmlibc-restrict-system-libc-headers' - - '-llvmlibc-*' - '-misc-const-correctness' - '-misc-definitions-in-headers' - '-misc-no-recursion' @@ -32,16 +27,16 @@ Checks: - '-misc-unused-parameters' - '-modernize-use-auto' - '-modernize-use-nodiscard' - - '-modernize-use-trailing-return-type' - '-modernize-use-using' + - '-modernize-use-trailing-return-type' - '-performance-enum-size' - '-readability-braces-around-statements' - '-readability-function-cognitive-complexity' - - '-readability-identifier-length' - - '-readability-identifier-naming' - '-readability-implicit-bool-conversion' - '-readability-simplify-boolean-expr' - '-readability-static-accessed-through-instance' + - '-readability-identifier-naming' + - '-readability-identifier-length' HeaderFilterRegex: '.*\.(cpp|h)$' FormatStyle: file From 358f8c1c3dc13595c4760cc87f32ed4db584e729 Mon Sep 17 00:00:00 2001 From: IAmNotHanni Date: Fri, 9 May 2025 13:11:31 +0200 Subject: [PATCH 4/4] Add cert warnings to clang-tidy --- .clang-tidy | 1 + 1 file changed, 1 insertion(+) diff --git a/.clang-tidy b/.clang-tidy index 00986e57..be6409cc 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,4 +1,5 @@ Checks: + - cert-* - clang-analyzer-* - bugprone-* - performance-*