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>
51 lines
1.4 KiB
Bash
Executable File
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
|