Как настроить линтеры (flake8, pylint)?python-56

1. Установка линтеров

pip install flake8 pylint

2. Базовая настройка flake8

Создание конфигурационного файла .flake8

[flake8]
# Базовые настройки
max-line-length = 120  # Максимальная длина строки
ignore = E203, W503   # Игнорируемые ошибки (https://flake8.pycqa.org/en/latest/user/error-codes.html)
exclude =             # Исключаемые директории
    .git,
    __pycache__,
    migrations,
    venv
per-file-ignores =    # Игнорирование правил для конкретных файлов
    __init__.py: F401
statistics = True     # Показывать статистику

Запуск flake8

flake8 .              # Проверка всех файлов
flake8 my_module.py   # Проверка конкретного файла

3. Продвинутая настройка pylint

Создание конфигурационного файла .pylintrc

[MASTER]
# Основные параметры
load-plugins = pylint_django  # Плагины (для Django проектов)
ignore = venv, migrations     # Игнорируемые директории

[MESSAGES CONTROL]
# Управление сообщениями
disable =                    # Отключаемые проверки
    missing-docstring,       # C0114, C0115, C0116
    too-few-public-methods,  # R0903
    import-error,            # E0401
    invalid-name            # C0103 (названия переменных)

[BASIC]
# Базовые настройки
good-names =                # Разрешенные имена переменных
    i,j,k,ex,Run,_
name-group =                # Регулярки для имен
    (([A-Z_][A-Z0-9_]*)|(__.*__))$

[DESIGN]
# Настройки проектирования
max-args = 5               # Максимальное количество аргументов
max-locals = 15            # Максимальное количество локальных переменных

Запуск pylint

pylint my_package/         # Проверка пакета
pylint --disable=C0114 my_module.py  # Временное отключение проверки

4. Интеграция с pre-commit

Настройка .pre-commit-config.yaml

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
  rev: v4.4.0
  hooks:
    - id: trailing-whitespace
    - id: end-of-file-fixer

- repo: https://github.com/PyCQA/flake8
  rev: 6.1.0
  hooks:
    - id: flake8
      additional_dependencies: [flake8-bugbear]

- repo: https://github.com/PyCQA/pylint
  rev: v3.0.3
  hooks:
    - id: pylint

Установка pre-commit

pip install pre-commit
pre-commit install

5. Плагины для расширения функциональности

Полезные расширения flake8

pip install flake8-bugbear   # Дополнительные проверки
pip install flake8-docstrings  # Проверка docstring (pep257)
pip install flake8-import-order  # Проверка порядка импортов

Полезные расширения pylint

pip install pylint-django    # Для Django проектов
pip install pylint-flask     # Для Flask проектов
pip install pylint-celery    # Для Celery

6. Настройка в VSCode

Пример .vscode/settings.json

{
  "python.linting.enabled": true,
  "python.linting.pylintEnabled": true,
  "python.linting.flake8Enabled": true,
  "python.linting.lintOnSave": true,
  "python.linting.pylintArgs": [
    "--rcfile=${workspaceFolder}/.pylintrc"
  ],
  "python.linting.flake8Args": [
    "--config=${workspaceFolder}/.flake8"
  ]
}

7. Кастомизация сообщений

Создание собственных правил pylint

# myplugin.py
from pylint.checkers import BaseChecker
from pylint.interfaces import IAstroidChecker

class MyCustomChecker(BaseChecker):
    __implements__ = IAstroidChecker
    name = 'custom'
    msgs = {
        'W9999': (
            'Avoid using "foo" as variable name',
            'avoid-foo',
            'Used when "foo" is used as variable name'
        )
    }

    def visit_name(self, node):
        if node.name == 'foo':
            self.add_message('avoid-foo', node=node)

def register(linter):
    linter.register_checker(MyCustomChecker(linter))

Регистрация плагина в .pylintrc

[MASTER]
load-plugins = myplugin

Резюмируем

правильная настройка flake8 и pylint позволяет поддерживать высокое качество кода в проекте. Используйте конфигурационные файлы для кастомизации проверок, интеграцию с pre-commit для автоматического линтинга и плагины для расширения функциональности. Оптимальная конфигурация зависит от специфики проекта и принятых в команде соглашений о коде.