phase1(hooks): lefthook auto-install + Pint + Larastan pre-commit hooks

Закрывает Tooling §10.1 шаги 10/11 («хуки в .claude/settings.json для
Pint/Larastan» — реализация через lefthook, как и было обещано в
CLAUDE.md §3.5: «Pre-commit (gitleaks, link-check) — не здесь, отдельно
через git hooks (lefthook)»).

Добавлено в lefthook.yml:
  - pre-commit job #5 «pint»: glob app/**/*.php, root app/,
    `php vendor/bin/pint {staged_files}` + stage_fixed: true
    (авто-fix форматирования PSR-12 на staged PHP)
  - pre-commit job #6 «larastan»: glob app/**/*.php, root app/,
    `php vendor/bin/phpstan analyse --no-progress --memory-limit=512M`
    (полный анализ при любой правке *.php — phpstan нужен граф классов,
    точечный анализ только staged невозможен)

Хуки установлены через `npx lefthook install` — .git/hooks/pre-commit
и .git/hooks/pre-push сгенерированы. Smoke-test:
  - pint --test (на default scaffold) → passed
  - phpstan analyse --no-progress → 0 ошибок выше baseline (3 в baseline)

Это опционально-блокирующий слой: при коммите .php — Pint авто-форматирует,
Larastan ловит ошибки выше phpstan-baseline.neon. Обход — `LEFTHOOK=0
git commit` (использовать только для emergency).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-05-08 11:44:52 +03:00
parent 9ee31b71cb
commit 4eee06fb22
+23
View File
@@ -54,6 +54,29 @@ pre-commit:
Stylelint нашёл проблемы в CSS прототипа.
Запусти `npx stylelint --fix <file>` где возможно.
# 5. Pint — code style PHP (фаза 1, Прил. Н #11). Авто-fix на staged .php в app/.
- name: pint
glob: "app/**/*.php"
root: "app/"
run: php vendor/bin/pint {staged_files}
stage_fixed: true
fail_text: |
Pint не смог отформатировать какие-то файлы (синтаксическая ошибка PHP?).
Запусти `cd app && composer pint` локально, посмотри вывод.
# 6. Larastan — статанализ PHP (фаза 1, Прил. Н #12). Полный анализ при любой правке
# *.php в app/ (точечный анализ только staged-файлов невозможен — phpstan нужен граф
# классов). Скорость: ~5-10 с на default scaffold + baseline 3.
- name: larastan
glob: "app/**/*.php"
root: "app/"
run: php vendor/bin/phpstan analyse --no-progress --memory-limit=512M
fail_text: |
Larastan нашёл новые ошибки выше baseline.
Запусти `cd app && composer stan` локально и поправь.
Если ошибка ложная — обнови `app/phpstan-baseline.neon`
(см. feedback_environment.md п.25 — генерация baseline в 2 шага).
# Pre-push: проверки перед git push (медленнее, но реже запускаются)
pre-push:
parallel: false