auto-lint
Универсальный автолинтинг для всех языков: определяет тип файла и запускает подходящий линтер.
Описание
Простым языком
Линтер — это инструмент который проверяет код на ошибки и несоответствия стилю. Для TypeScript один линтер, для Python другой, для Go третий. Этот хук работает как диспетчер: смотрит на расширение файла и сам выбирает нужный инструмент.
Ты пишешь код на нескольких языках — хук покрывает все сразу. Изменил Python-файл — запускается ruff. Изменил TypeScript — запускается ESLint. Настраивается один раз, работает для всего проекта.
Что делает
Хук auto-lint — универсальный линтер, который определяет тип файла по расширению и запускает подходящий инструмент. TypeScript — ESLint, Python — ruff, Go — gofmt, Rust — rustfmt, CSS — stylelint. Один хук для всего стека.
Работает как "зонтичный" хук поверх специализированных (prettier, python-lint). Если специализированный хук уже запущен — auto-lint дополняет его ESLint-проверками, которые prettier не делает.
Когда срабатывает
Триггер: PostToolUse — после Write или Edit. Условие: любой файл с кодом. Действие: определяет расширение → запускает соответствующий линтер с --fix флагом.
Установка
- Установи нужные линтеры для своего стека (см. список ниже)
- Добавь конфиг
PostToolUseв.claude/settings.json - Создай
~/.claude/hooks/auto-lint.shс правамиchmod +x - Проверь: измени файл и убедись что линтер запускается
Конфиг settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/auto-lint.sh"
}
]
}
]
}
}Скрипт хука
#!/bin/bash
# auto-lint.sh — универсальный линтер по расширению файла
# PostToolUse: Write | Edit
FILE="${CLAUDE_TOOL_INPUT_PATH:-}"
[ -z "$FILE" ] && exit 0
case "$FILE" in
*/node_modules/*|*/dist/*|*/.next/*|*/build/*|*/.venv/*|*/venv/*)
exit 0
;;
esac
EXT="${FILE##*.}"
case "$EXT" in
ts|tsx)
if command -v npx &>/dev/null; then
ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
if ls "$ROOT/eslint.config."* "$ROOT/.eslintrc."* &>/dev/null 2>&1; then
npx eslint --fix "$FILE" 2>/dev/null || true
fi
fi
;;
js|jsx|mjs|cjs)
command -v npx &>/dev/null && npx eslint --fix "$FILE" 2>/dev/null || true
;;
py)
if command -v ruff &>/dev/null; then
ruff format "$FILE" 2>/dev/null
ruff check --fix "$FILE" 2>/dev/null || true
fi
;;
go)
command -v gofmt &>/dev/null && gofmt -w "$FILE" 2>/dev/null
command -v go &>/dev/null && go vet "$FILE" 2>/dev/null || true
;;
rs)
command -v rustfmt &>/dev/null && rustfmt "$FILE" 2>/dev/null
;;
css|scss)
if command -v npx &>/dev/null; then
npx prettier --write "$FILE" 2>/dev/null
npx stylelint --fix "$FILE" 2>/dev/null || true
fi
;;
sh|bash)
command -v shellcheck &>/dev/null && shellcheck "$FILE" 2>/dev/null || true
;;
*) exit 0 ;;
esac
exit 0Установка линтеров для разных языков:
# TypeScript / JavaScript
npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
# Python
pip install ruff
# или через uv
uv add ruff --dev
# Go — встроен в toolchain, дополнительно:
go install golang.org/x/tools/cmd/goimports@latest
# Rust — встроен в rustup:
rustup component add rustfmt clippy
# CSS
npm install --save-dev stylelint stylelint-config-standard
# Shell
apt install shellcheck # Debian/Ubuntu
brew install shellcheck # macOSПримеры работы
Что пропускает
- Файлы в
node_modules,dist,.next,venv— автоматически - Языки без установленного линтера — хук тихо пропускает
- Файлы без известного расширения
- Markdown и JSON — только prettier если настроен отдельно
Что обрабатывает
- TypeScript/TSX — ESLint с
--fix(ошибки типов, unused vars) - Python — ruff format + check (как black + isort + flake8)
- Go — gofmt форматирование + go vet проверка
- Rust — rustfmt форматирование
- CSS/SCSS — prettier + stylelint
- Shell — shellcheck статический анализ
Настройка под себя
Добавляй новые языки в case блок. Для монорепо с несколькими языками — это единственный хук который нужен.
- Добавь
rbдля Ruby черезrubocop --auto-correct - Добавь
phpчерезphp-cs-fixer fix - Добавь
ktдля Kotlin черезktlint --format - Добавь
javaчерезgoogle-java-format -i
Один хук для всего стека — это не компромисс, это принцип. Меньше конфигурации, больше единообразия.
> Пока нет комментариев
Связанный контент
Похожие инструменты
/typecheck
Проверка типов: tsc для TypeScript, pyright для Python. Показывает ошибки с пояснениями.
Открыть →/autoformat
Форматирование кода: Prettier для JS/TS, ruff для Python. Весь проект или конкретные файлы.
Открыть →/cleanup
Удаление debug-кода: console.log, debugger, print(), закомментированный код. Чистка перед коммитом.
Открыть →/code-review
Запуск ревью кода через субагента code-reviewer. Проверяет DRY, KISS, безопасность, именование.
Открыть →