pre-commit: fail on trailing whitespace

This commit is contained in:
Klaas van Schelven
2025-07-29 12:27:21 +02:00
parent 547e423df0
commit 9fa2fde3e5
2 changed files with 46 additions and 0 deletions

View File

@@ -14,3 +14,19 @@ if [ "$should_run" = "yes" ]; then
else
echo "No relevant changes; skipping Tailwind build."
fi
# Check for trailing whitespace in staged files, fail if found
git diff --cached --name-only --diff-filter=ACM | while IFS= read -r file; do
[ -f "$file" ] || continue
case "$file" in
*.py|*.js|*.ts|*.sh|*.md|*.txt|*.html|*.css)
if grep -qE '[[:space:]]+$' "$file"; then
echo "Commit aborted due to trailing whitespace."
echo "Fix it manually or use tools/strip-trailing-whitespace.sh"
exit 1
fi
;;
esac
done

View File

@@ -0,0 +1,30 @@
#!/bin/bash
#
# Strip trailing whitespace from tracked files with specific extensions.
# Usage: ./tools/strip-trailing-whitespace.sh
# Works on macOS (BSD sed) or Linux (GNU sed), but not both at once.
set -euo pipefail
# Extensions to include
EXT_REGEX='\.(py|js|ts|sh|md|txt|html|css)$'
# Detect sed flavor
if sed --version >/dev/null 2>&1; then
SED_CMD=(sed -i -e 's/[[:space:]]\+$//')
elif sed -i '' testfile 2>/dev/null; then
SED_CMD=(sed -i '' -e 's/[[:space:]]\+$//')
else
echo "Unsupported sed version. Must be GNU sed or BSD sed (macOS)." >&2
exit 1
fi
git ls-files -z | while IFS= read -r -d '' file; do
[[ -f "$file" ]] || continue
[[ "$file" =~ $EXT_REGEX ]] || continue
if grep -qE '[[:space:]]+$' "$file"; then
echo "Fixing: $file"
"${SED_CMD[@]}" "$file"
fi
done