#!/usr/bin/env bash # Pre-commit hook: format staged Haskell files with fourmolu. # Installed by: scripts/install-hooks set -euo pipefail PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" # Get staged .hs files (handles filenames with spaces) staged=$(git -C "$PROJECT_DIR" diff --cached --name-only --diff-filter=ACM -- '*.hs') if [ -z "$staged" ]; then exit 0 fi # Collect the files into an array mapfile -t files <<< "$staged" echo "--- Formatting staged Haskell files with fourmolu..." if ! "$PROJECT_DIR/hs" fourmolu --mode inplace "${files[@]}"; then echo "ERROR: fourmolu formatting failed" >&2 exit 1 fi # Re-stage any files that were modified by formatting changed=0 for f in "${files[@]}"; do if ! git -C "$PROJECT_DIR" diff --quiet "$f"; then git -C "$PROJECT_DIR" add "$f" changed=$((changed + 1)) fi done if [ "$changed" -gt 0 ]; then echo "--- Formatted $changed file(s) — re-staged automatically" fi