pip install flake8 pylint
[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 my_module.py # Проверка конкретного файла
[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 my_package/ # Проверка пакета
pylint --disable=C0114 my_module.py # Временное отключение проверки
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
pip install pre-commit
pre-commit install
pip install flake8-bugbear # Дополнительные проверки
pip install flake8-docstrings # Проверка docstring (pep257)
pip install flake8-import-order # Проверка порядка импортов
pip install pylint-django # Для Django проектов
pip install pylint-flask # Для Flask проектов
pip install pylint-celery # Для Celery
{
"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"
]
}
# 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))
[MASTER]
load-plugins = myplugin
правильная настройка flake8 и pylint позволяет поддерживать высокое качество кода в проекте. Используйте конфигурационные файлы для кастомизации проверок, интеграцию с pre-commit для автоматического линтинга и плагины для расширения функциональности. Оптимальная конфигурация зависит от специфики проекта и принятых в команде соглашений о коде.