Могу ли я отменить изменения стиля форматирования, которые Блэк вносит в мой код 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/), когда вы этого не хотели.

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

  1. Скопируйте список переформатированных файлов из вывода black precommit hook в отдельный файл с именем filelist например
  2. export SKIP=black для временного отключения черного хука precommit
  3. Ваши исходные (неформатированные) изменения уже находятся в индексе, зафиксируйте их с помощью git commit сейчас же.
  4. Сейчас же, unset SKIP чтобы снова включить черный хук precommit

Теперь вы можете работать с filelist самостоятельно, чтобы отменить изменения форматирования, пока исходные изменения уже зафиксированы.

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