Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015
-
Upload
alina-dolgikh -
Category
Technology
-
view
436 -
download
4
Transcript of Кирилл Борисов. Code style_checking_v2. PyCon Belarus 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,…)
Внешние средства: landscape.io
landscape.io https://landscape.io Онлайн-версия prospector Интегрируется с GitHub Бесплатен для open-source Графики, метрики, значки
Яндекс.ПаспортИнтегрированный 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 Метрики