diff --git a/scripts/pre-commit-hook.sh b/scripts/pre-commit-hook.sh new file mode 100755 index 000000000..fe8d487cb --- /dev/null +++ b/scripts/pre-commit-hook.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# Pre-commit hook for Foxhunt HFT system +# Lightweight checks only — compilation is validated by agents before commit + +set -e + +echo "🔍 Running pre-commit quality checks..." +echo "" + +# Check for common issues in staged files +echo "🔎 Checking for common issues..." +STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep "\.rs$" || true) + +if [ -n "$STAGED_FILES" ]; then + # Check for unwrap() usage + UNWRAP_FILES=$(echo "$STAGED_FILES" | xargs grep -l "\.unwrap()" 2>/dev/null || true) + if [ -n "$UNWRAP_FILES" ]; then + echo "âš ī¸ Warning: Found .unwrap() in staged files:" + echo "$UNWRAP_FILES" | sed 's/^/ /' + echo " Consider using ? operator or proper error handling" + echo "" + fi + + # Check for expect() with generic messages + EXPECT_FILES=$(echo "$STAGED_FILES" | xargs grep -l "\.expect(\"\")" 2>/dev/null || true) + if [ -n "$EXPECT_FILES" ]; then + echo "âš ī¸ Warning: Found .expect() with empty message in:" + echo "$EXPECT_FILES" | sed 's/^/ /' + echo " Provide descriptive error messages" + echo "" + fi + + # Check for TODO/FIXME comments + TODO_COUNT=$(echo "$STAGED_FILES" | xargs grep -c "TODO\|FIXME" 2>/dev/null | awk -F: '{sum+=$2} END {print sum}' || echo "0") + if [ "$TODO_COUNT" -gt 0 ]; then + echo "â„šī¸ Info: Found $TODO_COUNT TODO/FIXME comments in staged files" + echo "" + fi + + # Check for stub patterns in src/ files + SRC_FILES=$(echo "$STAGED_FILES" | grep "/src/" || true) + if [ -n "$SRC_FILES" ]; then + STUB_RETURNS=$(echo "$SRC_FILES" | xargs grep -n 'return 0\.0\b\|return 100\.0\|return 1\.0\b\|return vec!\[\]' 2>/dev/null | grep -v '// ok:' | grep -v '// legitimate' || true) + if [ -n "$STUB_RETURNS" ]; then + echo "âš ī¸ Warning: Possible stub return values in staged files:" + echo "$STUB_RETURNS" | head -5 | sed 's/^/ /' + echo " Add '// ok: ' comment to suppress if intentional" + echo "" + fi + + STUB_MARKERS=$(echo "$SRC_FILES" | xargs grep -n '"placeholder"\|"stub"\|"fake"\|"hardcoded"\|"dummy"' 2>/dev/null | grep -v '// ok:' || true) + if [ -n "$STUB_MARKERS" ]; then + echo "âš ī¸ Warning: Stub marker strings in production code:" + echo "$STUB_MARKERS" | head -5 | sed 's/^/ /' + echo "" + fi + fi +fi + +echo "✅ All pre-commit checks passed!" +echo "" +echo "Summary:" +echo " - Code quality checks: ✅" +echo "" + +exit 0