Ошибка предварительной фиксации 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!


отказ от ответственности: я создатель предварительной фиксации.

Другие вопросы по тегам