#!/bin/sh
# Refuses a commit whose Rust is not as rustfmt writes it, or that clippy warns about. Clippy only
# checks and never links, so it is light beside a test build (CLAUDE.md, Tests); with the line-tables
# profile it takes about a minute after a change and seconds otherwise.
git diff --cached --name-only --diff-filter=ACM | grep -q '\.rs$' || exit 0
if ! cargo fmt --all --check >/dev/null 2>&1; then
	echo "pre-commit: the Rust is not formatted; run cargo fmt --all" >&2
	exit 1
fi
if ! cargo clippy --workspace --all-targets -q -- -D warnings; then
	echo "pre-commit: clippy has warnings; fix them, or allow one where it is wrong, with a comment saying why" >&2
	exit 1
fi
