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

Какие знаешь способы автоматизации проверки кода линтерами?

2.0 Middle🔥 151 комментариев
#Python Core

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

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

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

Автоматизация проверки кода линтерами

Линтеры — это инструменты, которые анализируют исходный код и выявляют ошибки, нарушения стиля, потенциальные баги и нарушения лучших практик. Автоматизация проверки критична для поддержания качества в team-е.

Основные линтеры для Python

1. Ruff — быстрая полиция стиля

Современный линтер, написанный на Rust, заменяет flake8, isort, pylint в одном пакете.

# pyproject.toml
[tool.ruff]
line-length = 100
target-version = "py311"

[tool.ruff.lint]
select = [
    "E",    # PyCodeStyle ошибки
    "W",    # Warnings
    "F",    # Pyflakes (неиспользуемые импорты, undefined names)
    "I",    # isort (организация импортов)
    "C",    # Complexity
    "D",    # Docstrings
    "RUF",  # Ruff-специфичные правила
]
ignore = ["D100", "D101"]  # Игнорируем требование docstring для модулей/классов

[tool.ruff.lint.per-file-ignores]
"tests/**" = ["D100", "D101", "D102"]  # В тестах не требуем docstrings
"__init__.py" = ["F401"]  # Импорты в __init__ могут быть неиспользованы
# Запуск ruff
ruff check src/
ruff format src/  # Автоматическое форматирование

2. Pylint — углубленный анализ

Проверяет не только стиль, но и логические ошибки, потенциальные баги.

# .pylintrc
[MASTER]
disable=missing-docstring,too-few-public-methods
max-line-length=100

[BASIC]
good-names=i,j,k,x,y,z,f,df,_
pylint src/

3. Mypy — проверка типов

Гарантирует type-safety в Python коде.

# mypy.ini
[mypy]
python_version = 3.11
warn_return_any = True
warn_unused_configs = True
disallow_untyped_defs = True
disallow_incomplete_defs = True
no_implicit_optional = True
mypy src/

4. Black — форматер кода

Особенность: не дающий выбора, "opinionated" форматер. Все спорят с ним, но это гарантирует единообразие.

black src/

Автоматизация через Git Hooks

Pre-commit hooks

Pre-commit — фреймворк для управления git hooks. Запускает проверки перед коммитом.

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.1.8
    hooks:
      - id: ruff
        args: [--fix]  # Автоисправление
      - id: ruff-format

  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.5.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-added-large-files
        args: ["--maxkb=1000"]
      - id: debug-statements
        language: python
      - id: mixed-line-ending

  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v1.8.0
    hooks:
      - id: mypy
        additional_dependencies: [types-all]
        args: [--strict]

  - repo: https://github.com/PyCQA/pylint
    rev: pylint-3.0.3
    hooks:
      - id: pylint
# Установка
pip install pre-commit
pre-commit install

# Ручной запуск
pre-commit run --all-files

# На каждый коммит автоматически запустится
git commit -m "My changes"  # pre-commit hooks run, fix issues, then commit

Автоматизация через CI/CD

GitHub Actions

# .github/workflows/lint.yml
name: Lint and Type Check

on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.11"
      
      - name: Install dependencies
        run: |
          pip install --upgrade pip
          pip install ruff mypy pylint
      
      - name: Run Ruff
        run: ruff check src/ tests/
      
      - name: Run Ruff Format Check
        run: ruff format --check src/ tests/
      
      - name: Run Mypy
        run: mypy src/
      
      - name: Run Pylint
        run: pylint src/ --fail-under=8.0

GitLab CI

# .gitlab-ci.yml
stages:
  - lint

lint:
  stage: lint
  image: python:3.11
  script:
    - pip install ruff mypy pylint
    - ruff check src/
    - mypy src/
    - pylint src/
  only:
    - merge_requests
    - main

Jenkins Pipeline

pipeline {
    agent any
    
    stages {
        stage("Lint") {
            steps {
                sh """
                    pip install ruff mypy
                    ruff check src/
                    mypy src/
                """
            }
        }
    }
    
    post {
        always {
            step([$class: "PublishHTML", 
                  reportDir: "reports", 
                  reportFiles: "lint-report.html"])
        }
    }
}

Интеграция в IDE

VSCode

// .vscode/settings.json
{
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.fixAll": "explicit"
    }
  },
  "ruff.lint.args": ["--extend-select=I"],
  "mypy-type-checker.args": ["--strict"]
}

PyCharm

  • Preferences → Editor → Code Style → Python → Ruff
  • Preferences → Tools → Python Integrated Tools → Default linter → Pylint
  • Enable "Run linter on save"

Практический пример: Makefile

Удобно централизовать все команды:

.PHONY: lint format type-check lint-all test

lint:
	@echo "Running Ruff..."
	ruff check src/ tests/
	@echo "✓ Ruff passed"

format:
	@echo "Formatting code..."
	ruff format src/ tests/

type-check:
	@echo "Running Mypy..."
	mypy src/
	@echo "✓ Type checks passed"

lint-all: lint type-check
	@echo "✓ All checks passed!"

test: lint-all
	@echo "Running tests..."
	pytest tests/ -v --cov=src

# Запуск при коммите
pre-commit-install:
	pre-commit install
make lint         # Только ruff
make type-check   # Только mypy
make lint-all     # Все проверки
make test         # Проверки + тесты

Практические рекомендации

  1. Не игнорируй ошибки# noqa и # type: ignore только для обоснованных случаев.
  2. Strict mode — включи самые строгие проверки (mypy --strict, pylint 9.0+).
  3. Консистентность в team-е — все используют одну конфигурацию.
  4. CI/CD блокирует merge — pull request не мёржится, если не прошли проверки.
  5. Автоисправлениеruff --fix, black, isort экономят время.
  6. Pre-commit hooks — ловят проблемы до отправки на сервер.

Результат правильной автоматизации

✅ Код всегда соответствует стилю ✅ Баги выявляются ранше ✅ Type-safety гарантируется ✅ Code review быстрее (не обсуждаем стиль) ✅ Новички быстрее адаптируются

В моих проектах линтеры — первое, что я настраиваю, потому что они сохраняют время всей команде.

Какие знаешь способы автоматизации проверки кода линтерами? | PrepBro