Какие инструменты для проверки стиля кода (linting) вы знаете?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Инструменты для проверки стиля кода (Linting)
Linting — это автоматическая проверка кода на соответствие стилю, обнаружение потенциальных ошибок и опасных конструкций. Это критически важно для поддержания качества и консистентности кода в команде. Существует множество инструментов, каждый со своей специализацией.
1. Pylint — классический вариант
Pylint — один из самых строгих и комплексных линтеров. Проверяет стиль, потенциальные ошибки, сложность кода и многое другое.
pip install pylint
pylint my_module.py
pylint --generate-rcfile > .pylintrc
# Пример вывода pylint
# my_module.py:5:0: W0612: Unused variable 'x' (unused-variable)
# my_module.py:10:0: C0111: Missing function docstring (missing-docstring)
Плюсы:
- Очень подробная проверка
- Отличная документация
- Можно настроить под любой стиль
Минусы:
- Часто выдаёт ложные срабатывания
- Медленный на больших проектах
- Требует больше конфигурации
2. Flake8 — популярный выбор
Flake8 — комбинирует PyCodeStyle (PEP 8), PyFlakes и McCabe. Это золотой стандарт для многих проектов.
pip install flake8
flake8 my_module.py
flake8 . --count --max-line-length=120
# my_module.py
import os
import sys # F401: sys imported but unused
x = 1
print(x)
y = 2 # F841: local variable y is assigned but never used
Конфигурация в setup.cfg:
[flake8]
max-line-length = 100
ignore = E203, W503
exclude = .git,__pycache__,.venv
Плюсы:
- Простой и быстрый
- Хороший баланс между строгостью и полезностью
- Расширяемый через плагины
- Хорошее сообщество
Минусы:
- Менее подробный чем pylint
- Требует дополнительных инструментов для других проверок
3. Black — форматер кода
Black — не просто линтер, но полный автоматический форматер.
pip install black
black my_module.py
black . --line-length=100
# До Black
x = [1,2, 3, 4, 5]
result = some_function( arg1,arg2 , arg3 )
# После Black
x = [1, 2, 3, 4, 5]
result = some_function(arg1, arg2, arg3)
Плюсы:
- Полностью автоматический
- Быстрый
- Становится стандартом де-факто
Минусы:
- Не проверяет логические ошибки
4. isort — сортировка импортов
isort специализируется на автоматической сортировке импортов по PEP 8.
pip install isort
isort my_module.py
# До isort
from django.conf import settings
import os
from datetime import datetime
import sys
from myapp.models import User
# После isort
import os
import sys
from datetime import datetime
from django.conf import settings
from myapp.models import User
5. Ruff — новое поколение
Ruff — современный, очень быстрый линтер на Rust. Постепенно заменяет flake8.
pip install ruff
ruff check my_module.py
ruff format my_module.py
Плюсы:
- Несоизмеримо быстрее flake8
- Объединяет возможности flake8, isort, Black
- Модернизация экосистемы
6. Mypy — проверка типов
Mypy проверяет статические типы Python.
pip install mypy
mypy my_module.py
def greet(name: str) -> str:
return f"Hello, {name}"
print(greet(123)) # Error: Argument has incompatible type
7. Сравнение инструментов
| Инструмент | Скорость | Строгость | Конфигурируемость | Популярность |
|---|---|---|---|---|
| Pylint | Медленный | Очень высокая | Высокая | Высокая |
| Flake8 | Средняя | Средняя | Средняя | Очень высокая |
| Black | Быстрый | - | Низкая | Высокая |
| Ruff | Очень быстрый | Высокая | Средняя | Растёт |
| Mypy | Медленный | - | Средняя | Растёт |
Рекомендуемый stack в 2025 году
Для новых проектов:
pip install ruff mypy
[tool.ruff]
line-length = 100
target-version = "py310"
[tool.mypy]
python_version = "3.10"
strict = true
Для legacy проектов:
pip install flake8 pylint mypy
Интеграция в CI/CD
name: Linting
on: [push]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- run: pip install ruff mypy
- run: ruff check .
- run: mypy src/
Pre-commit hooks
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.0
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.0.0
hooks:
- id: mypy
Практические советы
Используй преформаттер (Black или Ruff format) — перестанешь спорить о стиле
Добавь проверку типов (mypy) — ловит много ошибок на фазе разработки
Настрой pre-commit hooks — проверка кода перед коммитом
Интегрируй в CI/CD — все PR будут проверяться
Не делай линтер слишком строгим — дром не должен замедлять разработку
Не используй только один инструмент — линтер + форматер + проверка типов = полная защита