ХукКачество кода

python-lint

Автоформатирование Python-файлов через ruff (format + isort) после каждого Write/Edit.

Закинь в Claude, Cursor или любой AI

Описание

Простым языком

В Python есть правила как писать код — называются PEP 8. AI их знает, но не всегда соблюдает: импорты в беспорядке, лишние пробелы, устаревший синтаксис. Ruff — инструмент который исправляет всё это за миллисекунды.

Этот хук запускает ruff автоматически после каждого изменения Python-файла. Тебе ничего не нужно делать — код всегда чистый и по стандарту.


Что делает

Хук python-lint запускает ruff format и ruff check --fix после каждого изменения .py файла. Ruff — линтер и форматтер на Rust, который заменяет сразу black, isort и flake8. В 10-100 раз быстрее предшественников.

Python-код от AI часто имеет неупорядоченные импорты, лишние пробелы и нарушения PEP 8. Ruff исправляет всё это за миллисекунды.

Когда срабатывает

Триггер: PostToolUse — после Write или Edit. Условие: расширение .py. Действие: ruff format для форматирования, ruff check --fix для автоисправления нарушений.


Установка

  1. Установи ruff: pip install ruff или uv add ruff --dev
  2. Создай pyproject.toml с конфигом ruff (см. блок ниже)
  3. Добавь хук PostToolUse в .claude/settings.json
  4. Создай ~/.claude/hooks/python-lint.sh с правами chmod +x

Конфиг settings.json

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/python-lint.sh"
          }
        ]
      }
    ]
  }
}

Скрипт хука

#!/bin/bash
# python-lint.sh — форматирование Python через ruff
# PostToolUse: Write | Edit

FILE="${CLAUDE_TOOL_INPUT_PATH:-}"
[ -z "$FILE" ] && exit 0

[[ "$FILE" != *.py ]] && exit 0

case "$FILE" in
  */.venv/*|*/venv/*|*/__pycache__/*) exit 0 ;;
esac

if ! command -v ruff &>/dev/null; then
  echo "SKIP [python-lint] ruff не установлен: pip install ruff"
  exit 0
fi

ruff format "$FILE" 2>/dev/null
ruff check --fix --select I,F401,UP,E,W "$FILE" 2>/dev/null

exit 0

Рекомендуемый конфиг pyproject.toml:

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

[tool.ruff.lint]
select = ["E", "F", "I", "UP", "W"]
ignore = ["E501"]

[tool.ruff.format]
quote-style = "double"
indent-style = "space"

Примеры работы

Что пропускает

  • Файлы в .venv, venv, __pycache__
  • Файлы в migrations/ если добавлен как исключение в ruff.toml
  • Проекты без ruff — хук выводит подсказку по установке

Что исправляет

  • Неупорядоченные импорты — сортировка через isort (правило I)
  • Неиспользуемые импорты — удаление F401
  • Устаревший синтаксис — modernize через UP (f-строки вместо format)
  • PEP 8 нарушения: пробелы, отступы, пустые строки (E, W)
  • Форматирование как Black: кавычки, запятые, скобки

Настройка под себя

  • Добавь noqa: F401 на строку для отключения конкретного правила
  • Настрой per-file-ignores для тестовых файлов
  • Добавь --unsafe-fixes для агрессивного автоисправления
  • Используй ruff check --diff для просмотра изменений перед применением
Ruff — это black + isort + flake8 в одном бинарнике на Rust. Скорость такая, что форматирование перестаёт ощущаться как задержка.
#Hooks#Claude Code
TG

> Пока нет комментариев

Связанный контент

Похожие инструменты