python-lint
Автоформатирование Python-файлов через ruff (format + isort) после каждого Write/Edit.
Описание
Простым языком
В 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 для автоисправления нарушений.
Установка
- Установи ruff:
pip install ruffилиuv add ruff --dev - Создай
pyproject.tomlс конфигом ruff (см. блок ниже) - Добавь хук
PostToolUseв.claude/settings.json - Создай
~/.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. Скорость такая, что форматирование перестаёт ощущаться как задержка.
> Пока нет комментариев
Связанный контент
Похожие инструменты
/typecheck
Проверка типов: tsc для TypeScript, pyright для Python. Показывает ошибки с пояснениями.
Открыть →/autoformat
Форматирование кода: Prettier для JS/TS, ruff для Python. Весь проект или конкретные файлы.
Открыть →/cleanup
Удаление debug-кода: console.log, debugger, print(), закомментированный код. Чистка перед коммитом.
Открыть →/code-review
Запуск ревью кода через субагента code-reviewer. Проверяет DRY, KISS, безопасность, именование.
Открыть →