Files
roux/.githooks/pre-commit
T
jbrechtel f74c431588 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
2026-05-19 21:56:27 -04:00

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