File indexing completed on 2024-05-19 05:42:35

0001 #!/bin/sh
0002 
0003 POS_CHECKS="cert-*,cppcoreguidelines-*,modernize-*,performance-*,readability-*"
0004 NEG_CHECKS="-modernize-use-trailing-return-type,-cppcoreguidelines-special-member-functions,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-readability-implicit-bool-conversion,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-owning-memory,-modernize-use-override,-readability-function-cognitive-complexity,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-readability-identifier-length,-readability-suspicious-call-argument,-cppcoreguidelines-init-variables,-cert-err58-cpp,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-type-const-cast,-cppcoreguidelines-avoid-goto,-cppcoreguidelines-pro-type-vararg,-clang-analyzer-*"
0005 
0006 EXEC=clang-tidy-14
0007 BUILD_DIR=build
0008 COMPILE_COMMANDS_JSON="$BUILD_DIR/compile_commands.json"
0009 PARALLEL=parallel
0010 
0011 TARGET_DIRS="$*"
0012 
0013 pr_err()
0014 {
0015     echo "ERROR: $*" 1>&2
0016 }
0017 
0018 fatal()
0019 {
0020     pr_err "$*"
0021     exit 1
0022 }
0023 
0024 if ! [ -d "$BUILD_DIR" ]; then
0025     fatal "$BUILD_DIR is not a directory"
0026 fi
0027 
0028 if ! [ -f "$COMPILE_COMMANDS_JSON" ]; then
0029     fatal "$COMPILE_COMMANDS_JSON not found"
0030 fi
0031 
0032 TARGET_FILES=
0033 
0034 for dir in $TARGET_DIRS; do
0035     if ! [ -d "$dir" ]; then
0036         fatal "$dir not found"
0037     fi
0038 
0039     for file in "$dir"/*.cpp; do
0040         TARGET_FILES="$TARGET_FILES $file"
0041     done
0042 done
0043 
0044 for file in $TARGET_FILES; do
0045     if ! [ -f "$file" ]; then
0046         fatal "$file not found"
0047     fi
0048 done
0049 
0050 # deglobbing $TARGET_FILES is intentional
0051 # shellcheck disable=SC2086
0052 if [ "$CLANG_TIDY_SERIAL" != "" ]; then
0053     echo "Running in serial"
0054     set -x
0055     "$EXEC" --checks="$POS_CHECKS,$NEG_CHECKS" --header-filter="^ct_.*" -p "$BUILD_DIR" --quiet --warnings-as-errors='*' -extra-arg=-Wno-unknown-warning-option $TARGET_FILES
0056 else
0057     echo "Running in parallel (default)"
0058     set -x
0059     "$PARALLEL" "$EXEC" --checks="$POS_CHECKS,$NEG_CHECKS" --header-filter="^ct_.*" -p "$BUILD_DIR" --quiet --warnings-as-errors='*' -extra-arg=-Wno-unknown-warning-option -- $TARGET_FILES
0060 fi