31

Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015

Embed Size (px)

Citation preview

Здравствуйте :)

Контроль за стилем кода

Борисов Кирилл, PyCon BY 2015

Контроль за стилем качеством кода

Борисов Кирилл, PyCon BY 2015

Теория

Типичная ситуация

Команда разработчиков (3-5 человек) Общий репозитарий Что-то покрыто тестами Времени на “излишества” нет Жизнь потихонечку идет

Возникающие проблемы

Каждый пишет по-своему Каждый знает, что его код - правильный Каждый верит, что остальные поймут… …или простят

Растет время code review Сложно править чужой код Споры о вкусах Рабочее время тратится зря

Возникающие проблемы

Все плохо.

Чем спасаться?

Style guide Автоматические проверки Процедура разрешения конфликтов Code Review Готовность к изменениям

Практика

Как это делается в Python?

PEP8 - базовый свод рекомендаций по оформлению кода. PEP257 - набор рекомендаций по оформлению docstring’ов Множество инструментов:pep8, pep257, pyflakes, pylint, pychecker…

Инструменты

autopep8 https://github.com/hhatto/autopep8 Автоматически правит ошибки PEP8 Может быть не тем, что вы ожидали :( Очень консервативен

Инструменты

frosted https://github.com/timothycrosley/frosted Форк pyflakes “Более открыт к изменениям” Больше проверок Python 2.6 - 3.4

Инструменты

pyroma https://bitbucket.org/regebro/pyroma Проверка стандартов упаковки кода:PyPi, Distribute, pip… Ставит оценку вашему коду, сравнивает его с сыром

Инструменты

pyroma https://bitbucket.org/regebro/pyroma Проверка стандартов упаковки кода:PyPi, Distribute, pip… Ставит оценку вашему коду, сравнивает его с сыром

Инструменты

isort https://pypi.python.org/pypi/isort Сортировка импортов Автоматически правит код Git-хук в комплекте

Инструменты

prospector https://github.com/landscapeio/prospector

pylint + pep8 + pyflakes + mccabe + dodgy Очень прост в использовании Адаптируется под Django и Celery Активно развивается

Наш выбор

flake8 https://gitlab.com/pycqa/flake8 Три в одном: pep8, pyflakes, mccabe Часто обновляется Легко расширяется Много готовых плагинов

Где проверять?

Интеграция с IDE (PyCharm, Emacs, vi) VCS pre-commit hooks (git, Mercurial, SVN) CI (Jenkins, TeamCity) Внешние средства (imhotep, landscape.io,…)

Git pre-commit hook

Внешние средства: landscape.io

landscape.io https://landscape.io Онлайн-версия prospector Интегрируется с GitHub Бесплатен для open-source Графики, метрики, значки

Case study

Яндекс.ПаспортИнтегрированный pep8 в IDE

Яндекс.ПаспортИнтегрированный pep8 в IDE Git pre-commit hooks:

– flake8 – flake8-debugger – flake8-print

Яндекс.ПаспортИнтегрированный pep8 в IDE Git pre-commit hooks:

– flake8 – flake8-debugger – flake8-print – forgetmenot – passport-isort

Собственные инструменты

forgetmenot <однажды на GitHub> Поиск TODO/FIXME Определение автора, времени Подсветка и оформление Не блокирует процесс коммита

Что ещё проверять?

Забытые пароли, ключи и т.д. Сложность кода Совместимость его с разными версия Python TODO, FIXME Метрики

A foolish consistency is the hobgoblin of little minds.

PEP8

Вопросы?

Спасибо!

@lensvol [email protected]