Files
claude-workflow/hooks/auto-format.sh
T
martinandClaude Opus 4.6 09860e32b0 fix: hartcodierte Repo-Pfade durch portable Alternativen ersetzen
bootstrap.sh ermittelt REPO dynamisch, settings.json referenziert Hooks
über ~/.claude/hooks (Symlink), auto-format.sh löst die Markdownlint-Config
relativ zum Script-Standort auf. Doku-Beispiele nutzen Platzhalter.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-11 19:19:01 +02:00

51 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# PostToolUse-Hook: Formatiert geänderte Dateien nach Edit/Write
# Wird von settings.json nach Edit- und Write-Tool-Aufrufen ausgeführt
set -euo pipefail
REPO_ROOT="$(dirname "$(cd "$(dirname "$(readlink -f "$0")")" && pwd)")"
FILE="${CLAUDE_TOOL_INPUT_FILE_PATH:-}"
if [[ -z "$FILE" || ! -f "$FILE" ]]; then
exit 0
fi
EXT="${FILE##*.}"
case "$EXT" in
py)
if command -v ruff &>/dev/null; then
ruff format --quiet "$FILE" 2>/dev/null || true
ruff check --fix --quiet "$FILE" 2>/dev/null || true
fi
;;
js|ts|vue|jsx|tsx)
DIR=$(dirname "$FILE")
if [[ -f "$DIR/package.json" ]] || [[ -f "$DIR/../package.json" ]]; then
if [[ -x "$DIR/node_modules/.bin/eslint" ]] || [[ -x "$DIR/../node_modules/.bin/eslint" ]]; then
npx eslint --fix --quiet "$FILE" 2>/dev/null || true
fi
fi
;;
sh)
if command -v shellcheck &>/dev/null; then
shellcheck "$FILE" || true
fi
;;
md|markdown)
if command -v markdownlint-cli2 &>/dev/null; then
# Erster Pass: entfernt Trennlinien und sonstige fixbare Verstöße.
# Zweiter Pass: räumt die nun verwaisten Mehrfach-Leerzeilen auf (MD012).
for _ in 1 2; do
markdownlint-cli2 \
--config "$REPO_ROOT/.markdownlint-cli2.jsonc" \
--fix "$FILE" >/dev/null 2>&1 || true
done
fi
;;
esac
exit 0