Налаштування автоматичного форматування при коміті
Суперечки про стиль коду в PR — трата часу ревьюерів. Автоматичне форматування при коміті видаляє цю проблему: код завжди відповідає стандарту, незалежно від налаштувань редактора розробника.
Інструменти форматування
JavaScript / TypeScript — Prettier для форматування, ESLint для линтингу. Вони вирішують різні завдання: Prettier контролює зовнішній вигляд (відступи, лапки, крапки з комою), ESLint — якість коду (невикористані змінні, потенційні баги).
Python — Black для форматування (zero-config), isort для сортування імпортів, Ruff як швидка заміна обом.
PHP — PHP CS Fixer або Pint (Laravel-first, засновано на CS Fixer).
Go — gofmt вбудований у мову, goimports додає управління імпортами.
Husky + lint-staged: стандарт для Node.js проектів
npm install --save-dev husky lint-staged
npx husky init
.husky/pre-commit:
#!/bin/sh
npx lint-staged
package.json:
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{css,scss,md,json,yaml}": [
"prettier --write"
],
"*.php": [
"./vendor/bin/pint"
]
}
}
lint-staged обробляє тільки staged файли — не форматує весь проект при кожному коміті. Це критично важливо для швидкості.
pre-commit framework: універсальне рішення
Для змішаних проектів або Python-екосистеми — pre-commit:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-merge-conflict
- repo: https://github.com/psf/black
rev: 24.3.0
hooks:
- id: black
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.3.0
hooks:
- id: ruff
args: [--fix]
pip install pre-commit
pre-commit install # Встановлює хуки в .git/hooks
Конфігурація Prettier
// .prettierrc
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 100,
"arrowParens": "always"
}
.prettierignore:
dist/
build/
node_modules/
*.min.js
Синхронізація з CI
Хуки на локальній машині легко обійти через --no-verify. В CI додаємо окрему перевірку:
- name: Check formatting
run: npx prettier --check .
- name: Check lint
run: npx eslint .
CI не форматує автоматично — тільки перевіряє та падає при порушеннях. Це мотивує розробників не обходити локальні хуки.
Терміни
Налаштування Husky + lint-staged + Prettier + ESLint для JavaScript/TypeScript проекту — 2–4 години. Налаштування pre-commit для Python або PHP — 2–4 години. Інтеграція перевірок в GitHub Actions CI — 1–2 години.







