Laravel Pint - форматувальник коду на основі PHP CS Fixer. Корисні режими:
vendor/bin/pint # виправити всі файли
vendor/bin/pint --test # лише перевірити, ненульовий код при помилках
vendor/bin/pint --dirty # лише файли з незакоміченими змінами
vendor/bin/pint --diff=main # лише файли, що відрізняються від гілки main
vendor/bin/pint --repair # виправити, але повернути ненульовий код, якщо було що виправляти
Простий pre-commit хук:
#!/bin/sh
files=$(git diff --cached --name-only --diff-filter=ACMR -- '*.php')
[ -z "$files" ] && exit 0
vendor/bin/pint $files
git add $files
git diff --cached- лише файли, додані в індекс (тобто ті, що потраплять у коміт);--diff-filter=ACMR- додані, скопійовані, змінені й перейменовані; видалені файли форматувати нема чого;git addпісля форматування - щоб виправлення потрапили в коміт.
Пастка частково доданих файлів: якщо у файлі частина змін додана в індекс (git add -p), а частина ні, то git add $files після Pint додасть у коміт і ті зміни, які ви навмисно не додавали. Варіанти:
- лише перевіряти, а не виправляти:
vendor/bin/pint --test $files- коміт блокується, розробник сам запускає Pint; - використати інструмент, що вміє працювати з частковим індексом (lint-staged ховає неіндексовані зміни на час перевірки).
--dirty у хуку - зручно, але він бере файли з будь-якими незакоміченими змінами, а не лише з індексу.
Що варто знати:
- форматування в хуку - зручність; в CI має бути
pint --test, щоб неформатований код не потрапив уmainчерез--no-verify; - конфігурація в
pint.json- однакова для хуку, CI й редактора; - великий одноразовий перехід на Pint краще зробити окремим комітом і додати його SHA у
.git-blame-ignore-revs, щобgit blameне показував форматування як автора всіх рядків.