Code style checking - yandexdownload.cdn.yandex.net/company/experience/python_party/... · 2018. 5....
Transcript of Code style checking - yandexdownload.cdn.yandex.net/company/experience/python_party/... · 2018. 5....
Контроль за стилем кода
PEP8, pyflakes и все-все-все.
Здравствуйте :)
Борисов Кирилл, разработчик
6 лет профессионального программирования
Python, C/C++, Java
Работал над АСУ, учетными системами
Теория
Возникающие проблемы
Ручная проверка чревата ошибками. Люди ленятся проверять сами. Контролировать манеру написания кода. “Особые” правила.
Как это делается в Python?
PEP8 - базовый свод рекомендаций по оформлению кода. Инструменты: pep8 - соблюдение правил PEP8. pylint - именование элементов кода и т.д. pyflakes - логические ошибки в коде. flake8 - pep8 + pyflakes + плагины
Наш выбор
flake8 https://gitlab.com/pycqa/flake8 Три в одном: pep8, pyflakes, mccabe Часто обновляется Легко расширяется Много готовых плагинов
Где проверять?
Интеграция с IDE (PyCharm, Emacs, vi) VCS pre-commit hooks (git, Mercurial, SVN) CI (Jenkins, TeamCity) Внешние средства (imhotep, ReviewBot,…)
Git pre-commit hook
Jenkins
Интеграция через связку плагинов analysis-core + warnings Запуск на каждый коммит pep8, pyflakes, … Графики трендов “Ломать” сборку при превышении количества предупреждений
Case study
Яндекс.ПаспортИнтегрированные pep8 в IDE
Яндекс.ПаспортИнтегрированные pep8 в IDE Git pre-commit hooks:
– flake8 – flake8-debug – flake8-print – flake8-passport
Яндекс.ПаспортИнтегрированные pep8 в IDE Git pre-commit hooks:
– flake8 – flake8-debug – flake8-print – flake8-passport
imhotep + github-webhook-wrapper
Что ещё проверять?
Отладочный код (pdb, ipdb…) Цикломатическая сложность Копипаста Неоптимальные конструкции в коде
Практика: расширяем flake8
flake8-todo
flake8-commas
flake8-print
Вопросы?
Спасибо!
Полезные ссылки
PEP8 https://www.python.org/dev/peps/pep-0008 pep8 https://pypi.python.org/pypi/pep8 pyflakeshttps://pypi.python.org/pypi/pyflakes flake8 https://gitlab.com/pycqa/flake8
Полезные ссылки
imhotep https://github.com/justinabrahms/imhotep
github-webhook-wrapperhttps://github.com/datafolklabs/github-webhook-wrapper
Jenkins warnings pluginhttps://wiki.jenkins-ci.org/display/JENKINS/Warnings+Plugin
Jenkins + flake8 + toxhttp://www.mediawiki.org/wiki/Continuous_integration/Tutorials/Test_your_python