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

code-simplifier

Анализирует и упрощает написанный код при завершении сессии. Срабатывает после изменения 3+ файлов.

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

Описание

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

AI склонен усложнять код: пишет длинные функции, использует магические числа вместо понятных названий, делает файлы слишком большими. После большой сессии это незаметно. Хук замечает это за тебя.

После работы с 3 и более файлами хук проверяет: нет ли чего-то слишком раздутого? Не правит сам — просто говорит: вот здесь стоит посмотреть. Ты сам решаешь исправлять сейчас или записать на потом.


Что делает

Хук code-simplifier срабатывает при завершении сессии, если было изменено 3 и более файлов. Анализирует написанный код на сложность и формирует список для ревью: длинные функции, дублирование, магические числа.

Не правит код автоматически — только указывает на проблемы. Финальное решение за разработчиком. Это мягкий code-reviewer на выходе из сессии.

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

Триггер: Stop — при завершении сессии. Условие: изменено 3+ файлов за сессию. Действие: статический анализ изменённых файлов, вывод списка потенциальных улучшений.


Установка

  1. Добавь конфиг Stop в .claude/settings.json
  2. Создай ~/.claude/hooks/code-simplifier.sh с правами chmod +x
  3. Установи cloc для точного подсчёта строк кода (опционально)

Конфиг settings.json

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/code-simplifier.sh"
          }
        ]
      }
    ]
  }
}

Скрипт хука

#!/bin/bash
# code-simplifier.sh — анализ сложности кода после сессии
# Stop: при изменении 3+ файлов

PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"

CHANGED_FILES=$(git -C "$PROJECT_DIR" diff --name-only 2>/dev/null)
CHANGED_COUNT=$(echo "$CHANGED_FILES" | grep -c '.' 2>/dev/null || echo 0)

if [ "$CHANGED_COUNT" -lt 3 ]; then
  exit 0
fi

echo ""
echo "━━━ CODE SIMPLIFIER ━━━"
echo "Проверяю $CHANGED_COUNT изменённых файлов..."
echo ""

ISSUES=0

while IFS= read -r FILE; do
  [ -z "$FILE" ] && continue
  FULL_PATH="$PROJECT_DIR/$FILE"
  [ ! -f "$FULL_PATH" ] && continue

  case "$FILE" in
    *.ts|*.tsx|*.js|*.jsx|*.py|*.go) ;;
    *) continue ;;
  esac

  LINES=$(wc -l < "$FULL_PATH" 2>/dev/null || echo 0)

  if [ "$LINES" -gt 500 ]; then
    echo "WARN $FILE — $LINES строк (>500). Рассмотри разбиение на модули."
    ISSUES=$((ISSUES + 1))
  fi

  MAGIC=$(grep -nE '[2-9][0-9]{2,}' "$FULL_PATH" 2>/dev/null | grep -v '//' | head -3)
  if [ -n "$MAGIC" ]; then
    echo "MINOR $FILE — магические числа (вынеси в константы):"
    echo "$MAGIC" | sed 's/^/  /'
    ISSUES=$((ISSUES + 1))
  fi

done <<< "$CHANGED_FILES"

if [ "$ISSUES" -eq 0 ]; then
  echo "Всё чисто. Код выглядит хорошо."
else
  echo ""
  echo "Найдено $ISSUES потенциальных улучшений"
  echo "Исправлять необязательно прямо сейчас — запиши как техдолг"
fi

echo "━━━━━━━━━━━━━━━━━━━━━━"
echo ""

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

Пример вывода после сессии с 5 изменёнными файлами:

━━━ CODE SIMPLIFIER ━━━
Проверяю 5 изменённых файлов...

WARN src/collections/Frameworks.ts — 612 строк (>500). Рассмотри разбиение на модули.
MINOR src/lib/data.ts — магические числа (вынеси в константы):
  187:  const LIMIT = 1000
  234:  if (views > 500) {

Найдено 2 потенциальных улучшений
Исправлять необязательно прямо сейчас — запиши как техдолг
━━━━━━━━━━━━━━━━━━━━━━

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

  • Сессии с менее чем 3 изменёнными файлами
  • Файлы без кода: .md, .json, .env.example
  • Числа 0 и 1 — не считаются magic numbers
  • Числа в комментариях (строки с //)

Что анализирует

  • Файлы больше 500 строк — предложение модульного разбиения
  • Магические числа больше 99 — предложение вынести в константы
  • Список файлов выводится в порядке изменений из git diff

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

  • Измени порог файлов: 500 на нужное значение
  • Добавь проверку функций через awk для подсчёта строк в функциях
  • Добавь запись результатов в docs/ai-notes/ как техдолг
  • Интегрируй с jscpd для поиска дублирования кода
Код не становится проще сам по себе. code-simplifier — это напоминание смотреть назад, а не только вперёд.
#Hooks#Claude Code#Quality Gates
TG

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

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

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