smart-formatting — хук для Claude Code: что делает и как установить
Автоматически форматирует код после правок агента с помощью Prettier, Black, gofmt, rustfmt или php-cs-fixer по расширению файла.
npx claude-code-templates@latest --hook development-tools/smart-formattingЧто делает smart-formatting
Хук перехватывает события PostToolUse для инструментов Edit и MultiEdit в Claude Code. Как только агент меняет файл, сценарий проверяет его расширение через переменную $CLAUDE_TOOL_FILE_PATH и вызывает подходящую утилиту.
Для файлов JavaScript, TypeScript, JSON, CSS и HTML хук запускает npx prettier --write. Скрипты на Python обрабатываются через black, код на Go форматируется утилитой gofmt -w, Rust — через rustfmt, а файлы PHP — с помощью php-cs-fixer fix.
Каждый вызов содержит подавление ошибок 2>/dev/null || true. Без установленного в системе форматтера файл просто останется в исходном виде, а агент не получит предупреждения о сбое.
Какие задачи решает
- приводить код на JavaScript, TypeScript и HTML к стилю Prettier сразу после правок агента
- выравнивать структуру Python-файлов утилитой Black
- форматировать исходники на Go через gofmt после каждого изменения
- запускать rustfmt для кода на Rust без ручного вызова в консоли
Примеры запросов агенту
- Поправь типизацию и логику валидации в
server/auth.ts - Добавь обработчик ошибок в функцию экспорта в
main.py - Перепиши структуру данных в
pkg/storage.go
Как установить smart-formatting
1Через claude-code-templates
npx claude-code-templates@latest --hook development-tools/smart-formatting2Вручную: положить файлы
.claude/settings.jsonБлок hooks: событие (PreToolUse, PostToolUse, Stop…) → команда. Личные — ~/.claude/settings.json
По шагам, с командами для каждой платформы: Хуки Claude Code: что это, где настраивать и как запретить опасную команду
Вопросы о smart-formatting
Как установить smart-formatting в Claude Code?
Запустите команду npx claude-code-templates@latest --hook development-tools/smart-formatting в терминале или добавьте конфигурацию хука в файл .claude/settings.json.
Какие языки и утилиты поддерживает хук smart-formatting?
Он проверяет расширения файлов и форматирует JS, TS, JSON, CSS и HTML через Prettier, Python через Black, Go через gofmt, Rust через rustfmt и PHP через php-cs-fixer.
Что произойдёт, если нужный форматтер не установлен в системе?
Команда завершится без прерывания работы агента, потому что все вызовы содержат 2>/dev/null || true. Форматирование файла в таком случае просто не применится.
Исходный текст
smart-formatting.json · MIT
{
"description": "Smart code formatting based on file type. Automatically formats code using Prettier, Black, gofmt, rustfmt, and other language-specific formatters.",
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "if [[ \"$CLAUDE_TOOL_FILE_PATH\" == *.js || \"$CLAUDE_TOOL_FILE_PATH\" == *.ts || \"$CLAUDE_TOOL_FILE_PATH\" == *.jsx || \"$CLAUDE_TOOL_FILE_PATH\" == *.tsx || \"$CLAUDE_TOOL_FILE_PATH\" == *.json || \"$CLAUDE_TOOL_FILE_PATH\" == *.css || \"$CLAUDE_TOOL_FILE_PATH\" == *.html ]]; then npx prettier --write \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null || true; elif [[ \"$CLAUDE_TOOL_FILE_PATH\" == *.py ]]; then black \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null || true; elif [[ \"$CLAUDE_TOOL_FILE_PATH\" == *.go ]]; then gofmt -w \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null || true; elif [[ \"$CLAUDE_TOOL_FILE_PATH\" == *.rs ]]; then rustfmt \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null || true; elif [[ \"$CLAUDE_TOOL_FILE_PATH\" == *.php ]]; then php-cs-fixer fix \"$CLAUDE_TOOL_FILE_PATH\" 2>/dev/null || true; fi"
}
]
}
]
}
}
© davila7 · MIT · davila7/claude-code-templates