pre-commit
Предполагается, что удобно работает с хуками git-репозиториев. Понемногу осваиваю для постоянных автоматических проверок. Работа у меня через веб-интерфейс обычно, так хоть своё проверяю.
.pre-commit-config.yaml
- конфиг. Располагается прямо в корне репозитория. Для vale, например, такой (не совпадает с моим актуальным, потому что следы былого рабочего):default_stages: [pre-commit, pre-push] repos: - repo: local hooks: - id: vale-md name: vale-md entry: vale language: system types: ["file", "text", "markdown"] verbose: true - id: vale-dita name: vale-dita entry: vale --ignore-syntax language: system types: ["file", "non-executable", "text"] files: \.(dita|ditamap)$ verbose: true - id: vale-all name: vale entry: vale language: system types: ["text"] exclude: \.(dita|ditamap|md)$ verbose: true
Cмыслы тут:
verbose: true
— потому что иначе всё, что неerror
, фиг увидишь, а чтоerror
— фиг закоммитишь, пока не исправишь. А мне чаще актуальныwarning
илиsuggestion
— в смысле, убедись, что тут не косяк, или глянь, не лучше ли иначе. Но если глянула и это ок — коммитить можно.- маркдаун vale проверит с учётом того, что это маркдаун.
- dita — у меня нет понятного для vale способа работать с dita «как надо», поэтому игнор синтаксиса нужен, чтобы не жаловалось.
- Остальные похожие на текстовые — как vale захочет. Пусть жалуется, если что, разберёмся.
- Для нетекстового у меня проверок нет. Других проверок тоже пока нет.
Есть полезность
identify-cli <file>
— способ понять, что писать вtypes
для таких файлов.pre-commit install
– выполнить в репозитории, чтобы хук завёлся. После этого при желании можно:pre-commit run –-all-files
– выполнить хук на всех существующих файлах. Осторожно! Например, vale у меня на больших файлах может очень долго отрабатывать и насыпать безумное количество результатов. От мысли натравить разом на все файлы мне страшно становится. :)pre-commit run
— выполнить только на изменённых и застейдженных файлах и посмотреть, работает ли. Это должно срабатывать так же, как «само» по событиюcommit
.
- https://pre-commit.com/hooks.html - мега-список уже готовых хуков.
- https://verdantfox.com/blog/view/how-to-use-git-pre-commit-hooks-the-hard-way-and-the-easy-way - сильно помогло въехать.
Pre-commit не умеет скармливать указанной в конфиге в описании хука команде файлы поштучно. Просто не умеет. https://github.com/pre-commit/pre-commit/issues/394 — здесь есть ряд предложений по решению. В целом на основе echo $@ | xargs -n1 ваша_команда
, в смысле, «напечатай всё, скорми это xargs, которая в свою очередь передаст это вашей команде поштучно.