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