← Назад к вопросам

Какие инструменты для проверки стиля кода (linting) вы знаете?

1.8 Middle🔥 141 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Инструменты для проверки стиля кода (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 будут проверяться

Не делай линтер слишком строгим — дром не должен замедлять разработку

Не используй только один инструмент — линтер + форматер + проверка типов = полная защита

Какие инструменты для проверки стиля кода (linting) вы знаете? | PrepBro