chore(claude): add pint and eslint PostToolUse hooks
post-edit-pint.sh runs vendor/bin/pint --dirty from api/ after any .php edit. post-edit-eslint.sh runs pnpm eslint --fix inside the matching SPA dir for .vue/.ts/.tsx/.js files under apps/app/ or apps/portal/. Both exit 0 unconditionally — formatting failures must not block the agent.
This commit is contained in:
29
.claude/hooks/post-edit-eslint.sh
Executable file
29
.claude/hooks/post-edit-eslint.sh
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
input="$(cat)"
|
||||||
|
path="$(echo "$input" | jq -r '.tool_input.file_path // .tool_input.path // empty')"
|
||||||
|
|
||||||
|
[ -z "$path" ] && exit 0
|
||||||
|
|
||||||
|
# Strip leading absolute prefix if present, so we match repo-relative paths.
|
||||||
|
rel="$path"
|
||||||
|
if [[ "$path" = /* ]]; then
|
||||||
|
rel="${path#$CLAUDE_PROJECT_DIR/}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Match apps/app/** or apps/portal/** for .vue/.ts/.tsx/.js files.
|
||||||
|
if ! echo "$rel" | grep -Eq '^apps/(app|portal)/.+\.(vue|ts|tsx|js)$'; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract SPA dir and the path relative to it.
|
||||||
|
spa="$(echo "$rel" | grep -oE '^apps/(app|portal)')"
|
||||||
|
inside="${rel#$spa/}"
|
||||||
|
|
||||||
|
# SPA may not exist yet (apps/portal/ is planned but not present in tree).
|
||||||
|
[ -d "$CLAUDE_PROJECT_DIR/$spa" ] || exit 0
|
||||||
|
|
||||||
|
cd "$CLAUDE_PROJECT_DIR/$spa" 2>/dev/null || exit 0
|
||||||
|
pnpm eslint --fix "$inside" >/dev/null 2>&1 || true
|
||||||
|
exit 0
|
||||||
17
.claude/hooks/post-edit-pint.sh
Executable file
17
.claude/hooks/post-edit-pint.sh
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
input="$(cat)"
|
||||||
|
path="$(echo "$input" | jq -r '.tool_input.file_path // .tool_input.path // empty')"
|
||||||
|
|
||||||
|
# No path or non-PHP — nothing to do.
|
||||||
|
[ -z "$path" ] && exit 0
|
||||||
|
[[ "$path" != *.php ]] && exit 0
|
||||||
|
|
||||||
|
# Laravel app lives in api/. Pint binary is at api/vendor/bin/pint.
|
||||||
|
cd "$CLAUDE_PROJECT_DIR/api" 2>/dev/null || exit 0
|
||||||
|
[ -x vendor/bin/pint ] || exit 0
|
||||||
|
|
||||||
|
# --dirty only formats files with git changes — fast even when called per-edit.
|
||||||
|
vendor/bin/pint --dirty >/dev/null 2>&1 || true
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user