Мандо говорит: «Отформатируйте код»
Недавно мою команду осенило, что мы тратим слишком много времени на проверку кода из-за несоответствия форматирования между новыми PR и остальной частью нашей кодовой базы. Владея в основном службами и библиотеками JVM, мы решили использовать редактор стилей кода IntelliJ IDEA для создания форматов кода, с которыми могла согласиться вся команда - для Java, Groovy и Kotlin. Конечно, в процессе принятия решения разные мнения возникли по самым мельчайшим деталям, таким как перенос строк в различных сценариях, уровни отступов и т. Д. - однако мы упорно продолжали применять форматирование ко всему нашему коду, делили формат с нашими участниками, и назвал это хорошо выполненной работой.
Однако, хотя это упражнение закончилось тем, что наша команда потратила меньше времени на придирки синтаксиса, мы по-прежнему потратили немало времени на создание руководства по стилю кода и его распространение, но даже с этим были некоторые проблемы.
- Выбор стиля был сделан командой, и команды (и их мнения) со временем меняются.
- Мы выбрали инструмент от конкретного поставщика (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 и разработчиков библиотек, даже если вы не соглашаетесь со всеми его стилями.
- Черный экономит время. Черный вычеркивает все мнения из форматирования кода. Подкупившись его хорошо продуманным стилем, вам больше не нужно принимать какие-либо решения, например, «круты ли замыкающие запятые?» или «я должен увеличить длину строки?». Вы просто устанавливаете Black и запускаете его.
- Черный цвет детерминирован. При использовании Black вам дается очень мало контроля над форматированием кода, в отличие от других инструментов, которые позволяют огромное количество настроек. Это означает, что каждый раз, когда вы запускаете черный код в своем коде, вы получаете один и тот же результат. Это также означает, что каждый раз, когда вы смотрите на чужой код, использующий черный, все сразу становится вам знакомо.
- Стиль черных имеет смысл. Если вы посмотрите их документацию, то увидите веские причины для почти всех выбранных стилей - и хотя я не думаю, что мой питон слишком убогий, я думаю, что участники Black, вероятно, потратили больше времени на размышления об этих вещах, чем я имеют.
- У 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).
Зарегистрируйтесь для получения нашей рассылки.