Мандо говорит: «Отформатируйте код»

Недавно мою команду осенило, что мы тратим слишком много времени на проверку кода из-за несоответствия форматирования между новыми PR и остальной частью нашей кодовой базы. Владея в основном службами и библиотеками JVM, мы решили использовать редактор стилей кода IntelliJ IDEA для создания форматов кода, с которыми могла согласиться вся команда - для Java, Groovy и Kotlin. Конечно, в процессе принятия решения разные мнения возникли по самым мельчайшим деталям, таким как перенос строк в различных сценариях, уровни отступов и т. Д. - однако мы упорно продолжали применять форматирование ко всему нашему коду, делили формат с нашими участниками, и назвал это хорошо выполненной работой.

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

  1. Выбор стиля был сделан командой, и команды (и их мнения) со временем меняются.
  2. Мы выбрали инструмент от конкретного поставщика (IntelliJ IDEA), который, хотя и был отличным инструментом, сделал наше руководство по стилю более удобным для разработчиков, использующих различные инструменты.

К счастью, что касается питона, все эти проблемы уже решены компанией Black.

Представляем Black

Black был создан в 2018 году и описывается как «бескомпромиссный форматировщик кода Python».

Black - это самоуверенный инструмент для форматирования кода, основанный на общем руководстве по стилю Pep-8. В то время как Pep-8 и многие инструменты для проверки соответствия Pep-8, такие как pycodestyle или flake8, отлично подходят для проверки соблюдения рекомендаций Pep-8, Black - средство форматирования кода, которое автоматически обновит ваш код до Black. style, который является расширенным набором Pep-8.

Черный путь

Есть несколько причин, по которым я считаю, что Black - это разумный выбор для разработчиков Python и разработчиков библиотек, даже если вы не соглашаетесь со всеми его стилями.

  1. Черный экономит время. Черный вычеркивает все мнения из форматирования кода. Подкупившись его хорошо продуманным стилем, вам больше не нужно принимать какие-либо решения, например, «круты ли замыкающие запятые?» или «я должен увеличить длину строки?». Вы просто устанавливаете Black и запускаете его.
  2. Черный цвет детерминирован. При использовании Black вам дается очень мало контроля над форматированием кода, в отличие от других инструментов, которые позволяют огромное количество настроек. Это означает, что каждый раз, когда вы запускаете черный код в своем коде, вы получаете один и тот же результат. Это также означает, что каждый раз, когда вы смотрите на чужой код, использующий черный, все сразу становится вам знакомо.
  3. Стиль черных имеет смысл. Если вы посмотрите их документацию, то увидите веские причины для почти всех выбранных стилей - и хотя я не думаю, что мой питон слишком убогий, я думаю, что участники Black, вероятно, потратили больше времени на размышления об этих вещах, чем я имеют.
  4. У Black уже внушительный список пользователей. Хотя Black еще не входит в состав основной команды Official Python, в ряде известных проектов уже используется Black. Например, pytest, pandas, pipenv и Pillow (yay P’s) - это лишь часть счастливых пользователей Блэка.

Установка и запуск

Для работы Black требуется python 3.6+, но его все еще можно использовать для переформатирования кода Python 2.x.

Установить Black так же просто, как pip install black.

Бежать за черными так же просто black <target_directory>.

Результаты

Вывод

Каждый может высказать свое собственное мнение, когда дело доходит до форматирования кода. Однако, если вы заботитесь об эффективности и результативности больше, чем о создании идеального .pycodestyle файла, черный вам подойдет.

Примечание: Black - это бета-продукт.

Привет, я Эндрю Скотт, разработчик программного обеспечения и создатель Охрона. Ochrona фокусируется на улучшении безопасности Python, предоставляя понимание зависимостей вашего проекта и делая это с упором на опыт разработчика (DX).

Зарегистрируйтесь для получения нашей рассылки.