Flake8 - инструмент для улучшения качества кода Python
flake8 – это инструмент статического анализа кода, который проверяет совместимость кода с набором правил оформления в соответствии с PEP 8 для языка Python. Он может выполняться как из командной строки, так и как плагин в текстовых редакторах (например, PyCharm).
flake8 проверяет код на ошибки форматирования кода, стилистические ошибки, пробелы, качество документации и многое другое. Он может также проверять стандарты кодирования, такие как использование пробелов вместо табуляций, правильное оформление комментариев и документационных строк, и многое другое.
flake8 можно использовать для поддержки стандартов кодирования на python, такие как например следовать PEP8, PEP257 и другие стандарты, которые помогают упростить чтение и поддержку кода.
Пример настройки flake8 с помощью конфигурационного файла .flake8:
[flake8]
# Выбор стандарта кодирования
# PEP8 – совместимость кода с набором правил оформления в соответствии с PEP 8
# PEP257 – проверка документации
# H405 – проверка отсутствия неиспользуемых импортов
# зависит от проекта и его правил оформления кода
ignore=E501,E731,F405,W504
max-line-length=120
exclude=venv
Где:
- ignore – игнорируемые ошибки (E501 – длина строки, E731 – оборачивание исключений в слишком короткую форму, F405 – внесение изменений в модуль использованием импорта * с подчеркиванием, W504 – несоответствие порядка возврата / двоеточия)
- max-line-length – максимальное количество символов в строке
- exclude – исключаемые каталоги и файлы
Также flake8 является модульной системой, что означает, что вы можете определить собственные проверки и расширения для проверки кода на соответствие стандартам, специфичным для вашей организации или проекта.
Например, вы можете создать свою собственную проверку, чтобы определить, что ваши классы наследуются от конкретных классов или что функции имеют определенную сигнатуру.
Для того, чтобы использовать свои собственные проверки, вам нужно создать плагин и подключить его в конфигурационном файле flake8. Вы можете найти множество сторонних плагинов для flake8 на сайте PyPI.
Как пример, вы можете создать свою собственную проверку для проверки того, что ваши методы и функции содержат документацию:
python
import ast
import re
import pep8
class DocStringChecker(object):
name = 'DocstringChecker'
version = pep8.__version__
def __init__(self, tree, filename):
self.filename = filename
self.tree = tree
def run(self):
if self.filename.endswith('test.py') or self.filename.endswith('tests.py'):
return
for node in ast.walk(self.tree):
if isinstance(node, ast.FunctionDef) or isinstance(node, ast.ClassDef):
if not node.body or not isinstance(node.body[0], ast.Expr) or not isinstance(node.body[0].value, ast.Str):
yield (
node.lineno,
node.col_offset,
'DS001 Missing Doc-string for method {}'.format(node.name),
type(self)
)
elif re.match(r'^\s*$', node.body[0].value.s):
yield (
node.lineno,
node.col_offset,
'DS002 Empty Doc-string for method {}'.format(node.name),
type(self)
)
После того, как вы создали свою проверку, добавьте ее в конфигурационный файл flake8:
[flake8]
ignore=E501,E731,F405,W504
max-line-length=120
exclude=venv
docstring_extensions=rst
[flake8.extensions]
DS = DocStringChecker
где docstring_extensions - это список расширений файлов, которые нужно проверять, а flake8.extensions указывает нашу проверку.
В заключение, flake8 - это мощный инструмент для проверки качества кода и соблюдения стандартов Python. Он позволяет легко настроить проверки и расширять систему проверок с помощью собственных плагинов. Flak8 могут использовать только разработчики, поэтому он не будет работать на проектах с выпуском готовых программ.