Flake8 — инструмент, позволяющий просканировать код проекта и обнаружить в нем стилистические ошибки и нарушения различных конвенций кода на Python. Flake8 умеет работать не только с PEP 8, но и с другими правилами, к тому же поддерживает кастомные плагины.
Я покажу, как настроить Flake8, чтобы он автоматически подсвечивал проблемы прямо в коде
Шаг 1. Установка Flake8
Flake8 – это по сути модуль Python, поэтому его можно установить в одну из виртуальных сред Python. Я обычно использую venv, который хранится в папке проекта, в него и установим. Это легко с помощью терминала прямо в PyCharm.
pip install --upgrade flake8
![Терминал установки Flake8](https://tirinox.ru/wp-content/uploads/2019/12/Снимок-экрана-2019-12-12-в-14.31.15-1024x423.png)
Опционально можно его сохранить в списке зависимостей проекта командой (внимание: остальные зависимости тоже перезапишутся, если они отличаются от установленных).
pip freeze > requirements.txt
Шаг 2. Плагин File Watcher
У вас должен быть установлен плагин File Watcher, это официальный плагин, но он не всегда по умолчанию загружен – у меня вот не было его. Идем в настройки (на Маке – меню PyCharm – Preferences, в других системах посмотрите в меню File).
![Preferences PyCharm на Mac](https://tirinox.ru/wp-content/uploads/2019/12/Снимок-экрана-2019-12-12-в-14.37.26.png)
Там идем в Plugins – Marketplace – вбиваем в поиске File Watchers – Install – Restart IDE.
![Как установить File watchers в PyCharm](https://tirinox.ru/wp-content/uploads/2019/12/Снимок-экрана-2019-12-12-в-14.38.41-1024x352.png)
Шаг 3. Настраиваем Watcher
Нам нужно, чтобы при редактировании файла IDE смотрела за изменениями и прогоняла по файлу Flake8, если что-то изменилось. Для этого надо создать File Watcher – смотрителя, который будет выполнять команду.
Там же в настройках идем в Tools – File Watches – жмем на плюсик.
![Как найти File Watcher](https://tirinox.ru/wp-content/uploads/2019/12/Снимок-экрана-2019-12-12-в-14.44.01-712x1024.png)
Далее настраиваем смотрителя. Имя можно придумать любое. Остальные настройки:
- File type – Python
- Score – Current File, я выбрал только для текущего файла, чтобы расходовать меньше ресурсов и энергии. Вы можете выбрать на весь проект.
- Program – это путь до установленного Flake8 – я использую переменную, которая связана с путем к интерпретатору Python, файл flake8 лежит в ней же:
$PyInterpreterDirectory$/flake8
- Arguments – аргументы для flake8 – путь к анализируемому файлу:
$FileDir$/$FileName$
- Show console – Never – мы не будем никогда показывать консоль, а ошибки должны будут подчеркиваться прямо в коде!
- Output filters – это формат строки с описанием ошибки, которую выдает flake8, если находит стилистические проблемы. По этому формату IDE поймет, где именно возникла проблема (файл, строка, колонка, сообщение) – скопируйте это:
$FILE_PATH$:$LINE$:$COLUMN$: $MESSAGE$
![Иллюстрации настройки смотрителя](https://tirinox.ru/wp-content/uploads/2019/12/Снимок-экрана-2019-12-12-в-16.14.46-1024x875.png)
Это базовая настройка flake8. Конечно, вы можете настраивать инспекции индивидуально, но об этом расскажу как-нибудь потом.
Шаг 4. Отображаем стилистические проблемы в коде
Теперь нам нужно заставить PyCharm подчеркивать проблемы в нужных местах кода. Сделать это несложно, нужно включить соответствующую инспекцию.
В настройках ищем: Editor – Inspections – File Watchers – File Watcher Problems – должна стоять галочка, затем правее выбираем Severity: Error. Жмем ОК и все готово!
![Иллюстрация включение инспекции](https://tirinox.ru/wp-content/uploads/2019/12/Снимок-экрана-2019-12-12-в-16.28.14-1024x819.png)
Поздравляю. Начните редактировать файл и увидите, если возникнут сообщения о стилистических проблемах:
![Инспекция в действии! Код подчеркнут!](https://tirinox.ru/wp-content/uploads/2019/12/Снимок-экрана-2019-12-12-в-16.33.21-1024x390.png)
Git hook!
Создадим хук для системы контроля версий GIT. Вы же пользуетесь ей, я надеюсь. Так вот pre-commit-hook – это действие, выполняемое перед коммитом. Будем запускать flake8 перед каждым коммитом, что плохо оформленный код не попадал в репозиторий. Сделать это очень просто в пару консольных команд:
flake8 --install-hook git
git config --bool flake8.strict true
Если в коде нет проблем, то коммит будет зафиксирован. А если они есть – вам придется прежде их исправить.
🐉 Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈