Files
claude-workflow/hooks/auto-format.sh
T
martinandClaude Opus 4.7 6aecff2eea feat: Markdown-Hook mit Custom-Rule "no-hr"
Erzwingt Struktur über Überschriften statt horizontaler Trennlinien.

- Custom Rule hooks/markdownlint-rules/no-hr.js erkennt --- / *** / ___
  über das markdown-it-Token "hr" und liefert fixInfo zum Entfernen.
- .markdownlint-cli2.jsonc aktiviert no-hr und deaktiviert MD013/MD040/MD041/MD060
  (Begründung jeweils inline kommentiert).
- hooks/auto-format.sh erweitert um md|markdown-Zweig mit zwei --fix-Pässen
  (zweiter Pass räumt MD012-Doppel-Leerzeilen auf, die nach HR-Entfernung entstehen).
- bootstrap.sh installiert markdownlint-cli2 idempotent via npm -g.

Verifiziert:
- Custom Rule meldet --- und *** als Verstoß.
- Zwei --fix-Pässe entfernen Trennlinien und überflüssige Leerzeilen, Endzustand 0 Fehler.
- Bestehende README in /home/martin/Darktable/README.md ist nach Konfig-Anpassung 0 Fehler.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 10:10:17 +02:00

50 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
# Dateiname aus Umgebungsvariable (Claude Code setzt CLAUDE_TOOL_INPUT_FILE_PATH)
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 /mnt/projekte/claude-workflow/.markdownlint-cli2.jsonc \
--fix "$FILE" >/dev/null 2>&1 || true
done
fi
;;
esac
exit 0