chore: add fourmolu pre-commit hook
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
This commit is contained in:
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user