Ошибка предварительной фиксации yapf в файле, включенном в yapfignore
Один из хуков перед фиксацией, настроенный в репо, - это yapf (
.pre-commit-config.yaml
):
repos:
# Note: the YAPF config is found in `.style.yapf` and `.yapfignore`
- repo: https://github.com/pre-commit/mirrors-yapf
rev: v0.29.0
hooks:
- id: yapf
Всякий раз, когда я вношу изменения в файл, который включен, и запускаю ловушку перед фиксацией, ловушка терпит неудачу:
pre-commit run yapf
[WARNING] Unstaged files detected.
[INFO] Stashing unstaged files to ****************
yapf.....................................................................Failed
- hook id: yapf
- exit code: 1
yapf: Input filenames did not match any python files
Кто-нибудь знает, как избежать сбоя yapf в файлах, включенных в
.yapfignore
?
2 ответа
Итак, причина проблемы в том, что yapf обрабатывает файлы, находящиеся в папке, как если бы они не существовали, поэтому вы получите:
yapf: Input filenames did not match any python files
Ошибка при запуске yapf для любого файла в файле. Чтобы обойти эту проблему в
pre-commit
, Я добавил существующий файл python не в
.yapfignore
в качестве аргумента, поэтому yapf всегда имеет файл, с которым можно работать.
В вашем выводе и поведении, которое вы видите, происходит несколько вещей, поэтому я объясню их отдельно:
$ pre-commit run yapf
[WARNING] Unstaged files detected.
[INFO] Stashing unstaged files to ****************
этот вывод здесь указывает на то, что ваши неэтапные изменения были приняты и отменены, вероятно, не показывая того, чего вы ожидаете. ты, наверное, хочешь
pre-commit run yapf --all-files
при демонстрации того, что происходит
перейдем к актуальному вопросу.
pre-commit ничего не знает о деталях реализации того инструмента, который вы используете (и в некоторой степени тоже!)
когда файл находится внутри и вы передаете его ему, он действует так, как будто его не существует (что очень странно!)
$ tail -n999 hello_wat.py .yapfignore
==> hello_wat.py <==
x = 5+ 4
==> .yapfignore <==
hello*.py
$ yapf hello_wat.py
yapf: Input filenames did not match any python files
то, что вы, вероятно, хотите сделать, это использовать
pre-commit
с exclude
так что файлы никогда не передаются
yapf
вообще! взяв мой пример (вы не поделились своим
.yapfignore
или минимальный случай, чтобы уйти)
repos:
- repo: https://github.com/pre-commit/mirrors-yapf
rev: v0.29.0
hooks:
- id: yapf
exclude: ^hello\.*\.py$
теперь yapf не будет работать против
hello*.py
!
отказ от ответственности: я создатель предварительной фиксации.