Как применить YAPF для каждого файла Python в каталоге? - PullRequest
0 голосов
/ 18 ноября 2018

Я установил Google yapf (еще один модуль форматирования Python) в рамках проекта и попытался отформатировать все мои файлы Python на месте, однако я получил следующую ошибку:

$ yapf -i -r files **.py
yapf: Input filenames did not match any python files

почему yapf неспособен понять шаблон? Что я должен сделать, чтобы добиться того же?

РЕДАКТИРОВАТЬ Я также пробовал yapf -ir, как и предлагалось, но я получил:

$ yapf -ir
usage: yapf [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]
            [--style STYLE] [--style-help] [--no-local-style] [-p] [-vv]
            [files [files ...]]
yapf: error: cannot use --in-place or --diff flags when reading from stdin

, что странно, потому что я не читаю со стандартного ввода

1 Ответ

0 голосов
/ 18 ноября 2018

Первая проблема заключается в том, что в оболочке происходит подстановочный знак, за до даже запускается командная строка.Когда вы запускаете:

somecommand *.py

Эта команда не знает, что вы ввели *.Все, что он знает, это то, что вы передали список файлов.Другими словами, yapf неспособен понять шаблон, потому что он никогда не видит шаблон.

Вторая проблема заключается в том, что ** не является допустимым шаблоном слияния файла оболочки.Это семантически эквивалентно *, поэтому при запуске yapf -ir files **.py будут обрабатываться только любые файлы .py, содержащиеся в вашем текущем каталоге и внутри каталога files.

Если вы хотите запустить yapf рекурсивно ввсе ваши файлы Python, начиная с вашего текущего каталога, есть несколько решений.Возможно, самое простое:

yapf -ir .

Это обработает все файлы .py в вашем текущем каталоге и его дочерних элементах.Если вы хотите больше контроля над выбором файлов, используйте find и xargs:

find . -name '*.py' -print0 | xargs -0 yapf -i
...