From 576c9e4fe87c5bb38c84b23dcad3529f68eb4a47 Mon Sep 17 00:00:00 2001 From: Thaddeus Crews Date: Mon, 17 Jun 2024 10:39:02 -0500 Subject: [PATCH] CI: Add pre-commit hook for `clang-tidy` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Set to "manual" so it isn't invoked in normal workflow • Modernize `.clang-tidy` file --- .clang-tidy | 59 ++++++++++++-------------------------- .pre-commit-config.yaml | 16 +++++++++++ misc/scripts/clang_tidy.sh | 33 --------------------- 3 files changed, 34 insertions(+), 74 deletions(-) delete mode 100755 misc/scripts/clang_tidy.sh diff --git a/.clang-tidy b/.clang-tidy index aa5a269eac3..366781cc823 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,45 +1,22 @@ --- -Checks: 'clang-diagnostic-*,clang-analyzer-*,-*,cppcoreguidelines-pro-type-member-init,modernize-redundant-void-arg,modernize-use-bool-literals,modernize-use-default-member-init,modernize-use-nullptr,readability-braces-around-statements,readability-redundant-member-init' +Checks: >- + -*, + cppcoreguidelines-pro-type-member-init, + modernize-redundant-void-arg, + modernize-use-bool-literals, + modernize-use-default-member-init, + modernize-use-nullptr, + readability-braces-around-statements, + readability-redundant-member-init WarningsAsErrors: '' -HeaderFilterRegex: '' -FormatStyle: none +HeaderFileExtensions: ['', h, hh, hpp, hxx, inc, glsl] +ImplementationFileExtensions: [c, cc, cpp, cxx, m, mm, java] +HeaderFilterRegex: (core|doc|drivers|editor|main|modules|platform|scene|servers|tests)/ +FormatStyle: file CheckOptions: - - key: cert-dcl16-c.NewSuffixes - value: 'L;LL;LU;LLU' - - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField - value: '0' - - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors - value: '1' - - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic - value: '1' - - key: cppcoreguidelines-pro-type-member-init.IgnoreArrays - value: '1' - - key: cppcoreguidelines-pro-type-member-init.UseAssignment - value: '1' - - key: google-readability-function-size.StatementThreshold - value: '800' - - key: google-readability-namespace-comments.ShortNamespaceLines - value: '10' - - key: google-readability-namespace-comments.SpacesBeforeComments - value: '2' - - key: modernize-loop-convert.MaxCopySize - value: '16' - - key: modernize-loop-convert.MinConfidence - value: reasonable - - key: modernize-loop-convert.NamingStyle - value: CamelCase - - key: modernize-pass-by-value.IncludeStyle - value: llvm - - key: modernize-replace-auto-ptr.IncludeStyle - value: llvm - - key: modernize-use-bool-literals.IgnoreMacros - value: '0' - - key: modernize-use-default-member-init.IgnoreMacros - value: '0' - - key: modernize-use-default-member-init.UseAssignment - value: '1' - - key: modernize-use-nullptr.NullMacros - value: 'NULL' - - key: readability-braces-around-statements.ShortStatementLines - value: '0' + cppcoreguidelines-pro-type-member-init.IgnoreArrays: true + cppcoreguidelines-pro-type-member-init.UseAssignment: true + modernize-use-bool-literals.IgnoreMacros: false + modernize-use-default-member-init.IgnoreMacros: false + modernize-use-default-member-init.UseAssignment: true ... diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d09ecabe70c..cf10acfa799 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,6 +20,22 @@ repos: platform/android/java/lib/src/com/.* ) + - repo: https://github.com/pocc/pre-commit-hooks + rev: v1.3.5 + hooks: + - id: clang-tidy + files: \.(c|h|cpp|hpp|cc|hh|cxx|hxx|m|mm|inc|java|glsl)$ + args: [--fix, --quiet, --use-color] + types_or: [text] + exclude: | + (?x)^( + tests/python_build/.*| + platform/android/java/lib/src/com/.* + ) + additional_dependencies: [clang-tidy==18.1.1] + require_serial: true + stages: [manual] # Not automatically triggered, invoked via `pre-commit run --hook-stage manual clang-tidy` + - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.4.4 hooks: diff --git a/misc/scripts/clang_tidy.sh b/misc/scripts/clang_tidy.sh deleted file mode 100755 index 0c6998b4916..00000000000 --- a/misc/scripts/clang_tidy.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -# This script runs clang-tidy on all relevant files in the repo. -# This is more thorough than clang-format and thus slower; it should only be run manually. - -set -uo pipefail - -# Loops through all code files tracked by Git. -git ls-files -- '*.c' '*.h' '*.cpp' '*.hpp' '*.cc' '*.hh' '*.cxx' '*.m' '*.mm' '*.inc' '*.java' '*.glsl' \ - ':!:.git/*' ':!:thirdparty/*' ':!:platform/android/java/lib/src/com/google/*' ':!:*-so_wrap.*' | -while read -r f; do - # Run clang-tidy. - clang-tidy --quiet --fix "$f" &> /dev/null - - # Run clang-format. This also fixes the output of clang-tidy. - clang-format --Wno-error=unknown -i "$f" -done - -diff=$(git diff --color) - -# If no diff has been generated all is OK, clean up, and exit. -if [ -z "$diff" ] ; then - printf "\e[1;32m*** Files in this commit comply with the clang-tidy style rules.\e[0m\n" - exit 0 -fi - -# A diff has been created, notify the user, clean up, and exit. -printf "\n\e[1;33m*** The following changes must be made to comply with the formatting rules:\e[0m\n\n" -# Perl commands replace trailing spaces with `·` and tabs with ``. -printf "%s\n" "$diff" | perl -pe 's/(.*[^ ])( +)(\e\[m)$/my $spaces="·" x length($2); sprintf("$1$spaces$3")/ge' | perl -pe 's/(.*[^\t])(\t+)(\e\[m)$/my $tabs="" x length($2); sprintf("$1$tabs$3")/ge' - -printf "\n\e[1;91m*** Please fix your commit(s) with 'git commit --amend' or 'git rebase -i '\e[0m\n" -exit 1