Могу ли я отменить изменения стиля форматирования, которые Блэк вносит в мой код Python?
Есть ли у инструмента форматирования Python Black возможность отмены изменений форматирования, внесенных после его запуска? Или предполагается, что я использую систему контроля версий и делаю собственные резервные копии? Это по состоянию на декабрь 2019 года, версия Black 19.3b0.
4 ответа
Нет. Больше он ничего не делает, а только переформатирует переданные файлы. Это просто хорошо работающий инструмент Unix, и он ожидает, что вы будете управлять своим собственным контролем версий.
это --diff
вариант - лучший из возможных:
--diff
Не записывайте файлы обратно, просто выведите разницу для каждого файла на стандартный вывод.
Источник: https://github.com/psf/black
Некоторые текстовые редакторы и IDE, такие как Pycharm, позволяют вам просто нажать cmd+Z (или любую другую команду отмены в редакторе), чтобы вернуться к состоянию до автоформатирования. Также перед автоформатированием вы можете проверить, какие результаты будут с помощью Black Playground.
С помощью
--diff
флаг, можно направить вывод в
patch
который затем отправляется на стандартный вывод. Однострочный сценарий оболочки может использоваться как оболочка, где
$1
форматируемый файл:
black --quiet --diff "$1" | patch --quiet -o - "$1"
На случай, если вы случайно отформатировали много устаревшего кода с помощью черного хука предварительной фиксации (имеется в виду https://pre-commit.com/), когда вы этого не хотели.
Предупреждение: подумайте, прежде чем выполнять каждую из этих команд, чтобы проверить, правильно ли это делать в вашем случае.
- Скопируйте список переформатированных файлов из вывода black precommit hook в отдельный файл с именем
filelist
например export SKIP=black
для временного отключения черного хука precommit- Ваши исходные (неформатированные) изменения уже находятся в индексе, зафиксируйте их с помощью
git commit
сейчас же. - Сейчас же,
unset SKIP
чтобы снова включить черный хук precommit
Теперь вы можете работать с filelist
самостоятельно, чтобы отменить изменения форматирования, пока исходные изменения уже зафиксированы.