f74c431588
Installs a pre-commit hook that checks all staged .hs files are formatted by fourmolu before allowing a commit. Configured via core.hooksPath = .githooks. Run: ./hs fourmolu -i <files> to format
23 lines
954 B
Bash
Executable File
23 lines
954 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Pre-commit hook: format Haskell sources with fourmolu before each commit.
|
|
# Aborts the commit if formatting changes are needed.
|
|
#
|
|
# To install: make sure .githooks is CONFIGURED as the hooks directory
|
|
# in git config (or copy this to .git/hooks/pre-commit).
|
|
set -euo pipefail
|
|
|
|
# Only run if fourmolu is available (skips on systems without the hs wrapper)
|
|
if command -v ./hs &>/dev/null && ./hs fourmolu --version &>/dev/null 2>&1; then
|
|
# Check which .hs files are staged for commit
|
|
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.hs$' || true)
|
|
if [ -n "$STAGED_FILES" ]; then
|
|
# shellcheck disable=SC2086
|
|
if ! ./hs fourmolu -m check $STAGED_FILES >/dev/null 2>&1; then
|
|
echo "❌ Formatting check failed. Run the following to fix:"
|
|
echo " ./hs fourmolu -i $STAGED_FILES"
|
|
echo " git add $STAGED_FILES"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|