Riyyis Utilities for C++
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.0 KiB

#!/bin/sh
# Run clang-format across the codebase
# Depends: clang-format, git
# ------------------------------------------
error() {
b="$(tput bold)"
red="$(tput setf 4)"
n="$(tput sgr0)"
echo "${b}${red}Error:${n} $1" >&2
exit 1
}
if [ ! -d ".git" ]; then
error "please run this script from the project root"
fi
formatter=false
if command -v clang-format-11 >/dev/null 2>&1; then
formatter="clang-format-11"
elif command -v clang-format >/dev/null 2>&1; then
formatter="clang-format"
if ! "$formatter" --version | awk '{ if (substr($NF, 1, index($NF, ".") - 1) < 11) exit 1; }'; then
error "you are using '$("${formatter}" --version)', which appears to not be clang-format 11 or later."
fi
else
error "clang-format-11 is not available, but C++ files need linting!
Either skip this script, or install clang-format-11."
fi
files="${1:-$(git --no-pager diff --cached --name-only --diff-filter=d)}"
files="$(echo "$files" | grep -E '\.(cpp|h)$')"
if [ -z "$files" ]; then
exit
fi
# shellcheck disable=SC2086
"$formatter" --style=file -i $files