QOwnNotes/scripts/clang-format-project.sh

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

59 lines
1.7 KiB
Bash
Raw Permalink Normal View History

#!/bin/env bash
#
# A tool to run clang-format on the entire project
#
# Some inspirations were taken from https://github.com/eklitzke/clang-format-all
# Variable that will hold the name of the clang-format command
FMT=""
# Some distros just call it clang-format. Others (e.g. Ubuntu) are insistent
# that the version number be part of the command. We prefer clang-format if
# that's present, otherwise we work backwards from highest version to lowest
# version.
for clangfmt in clang-format{,-{4,3}.{9,8,7,6,5,4,3,2,1,0}}; do
if which "$clangfmt" &>/dev/null; then
FMT="$clangfmt"
break
fi
done
# Check if we found a working clang-format
if [ -z "$FMT" ]; then
echo "failed to find clang-format"
exit 1
fi
# Function to run clang-format on all *.cpp and *.h files in a directory (optionally recursively)
format_directory() {
directory="$1"
recursive="$2"
2020-02-10 18:23:25 +01:00
if [ "$recursive" = "true" ]; then
files=$(find "$directory" -type f \( -name '*.cpp' -or -name '*.h' \))
else
files=$(ls "$directory"/*.cpp "$directory"/*.h 2>/dev/null)
fi
for file in $files; do
echo "Formatting $file"
$FMT -i "$file"
done
}
# Use format_directory on the src and tests directories
format_directory src false
format_directory src/entities true
format_directory src/utils true
format_directory src/helpers true
format_directory src/services true
format_directory src/widgets true
format_directory src/dialogs true
format_directory src/api true
format_directory src/dialogs true
format_directory src/dialogs true
format_directory src/dialogs true
format_directory src/libraries/piwiktracker true
format_directory src/libraries/qmarkdowntextedit true
format_directory tests/unit_tests true