moex-vibe/docs/superpowers/specs/2026-06-14-pre-commit-checks-design.md
Sergey Krylov a14e24d8e8
Some checks failed
CI / lint (pull_request) Successful in 1m58s
CI / test (pull_request) Failing after 1m43s
CI / build (pull_request) Failing after 1m42s
CI / lint (push) Successful in 1m44s
CI / test (push) Failing after 1m46s
CI / build (push) Failing after 1m32s
chore: commit docs and lockfile changes
2026-06-14 09:10:33 +03:00

2.3 KiB
Raw Blame History

Pre-commit Checks: ESLint + Prettier для монорепозитория

Дата

2026-06-14

Проблема

При коммите нет локальных проверок кода. Ошибки линтера и форматирования обнаруживаются только вручную или на CI (которого пока нет).

Решение

Husky + lint-staged для pre-commit хука, который проверяет ESLint и Prettier только на staged файлах и блокирует коммит при ошибках.

Схема работы

git commit → husky pre-commit → lint-staged ├── staged *.ts (apps/backend) → eslint --max-warnings=0 ├── staged *.ts/tsx (apps/frontend) → eslint --max-warnings=0 └── staged *.ts/tsx (все) → prettier --check (с выводом diff) → любая ошибка → commit BLOCKED

Состав изменений

1. Frontend ESLint

  • Установить в apps/frontend (локально): eslint, @eslint/js, typescript-eslint, eslint-plugin-react-hooks, eslint-plugin-react
  • Создать apps/frontend/eslint.config.js (flat config)
  • Добавить "lint": "eslint src/" в apps/frontend/package.json

2. Husky + lint-staged

  • Установить в корень: husky, lint-staged
  • npx husky init → создать .husky/pre-commit
  • Конфиг lint-staged в корневом package.json:
    • apps/backend/src/**/*.tseslint --max-warnings=0
    • apps/frontend/src/**/*.ts{,x}eslint --max-warnings=0
    • *.{ts,tsx}prettier --check

3. Root lint script

  • Расширить на оба workspace: "lint": "npm run lint -w apps/backend && npm run lint -w apps/frontend"

Поведение при ошибках

  • ESLint: показывает ошибки, commit blocked
  • Prettier: показывает diff, commit blocked. Разработчик запускает npm run format вручную.

Файлы для создания

  • apps/frontend/eslint.config.js
  • .husky/pre-commit

Файлы для изменения

  • apps/frontend/package.json — scripts + devDependencies
  • Корневой package.json — lint-staged config + lint script + devDependencies