Fallow: Инструмент анализа кода, который нужен каждому пользователю Claude

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00Это Fallo — инструмент интеллектуального анализа кода для TypeScript и JavaScript, который проверяет весь проект на наличие мертвого кода, дубликатов, излишней сложности и многого другого.
00:00:10Это значит, что вам больше не нужно комбинировать NIP, JSC, PD и ESLint только для того, чтобы ваши агенты не выпускали плохой код.
00:00:17Он написан на Rust и поддерживает более 90 плагинов, а значит, будет работать «из коробки» с большинством фреймворков и популярных пакетов.
00:00:23Но тот факт, что он поддерживает только JavaScript и TypeScript, делает его менее привлекательным для разработчиков, использующих ИИ.
00:00:29Подписывайтесь, и давайте во всем разберемся.
00:00:30Итак, вот проект, над которым я работаю: он добавляет видео и изображениям эффект кинопленки.
00:00:39В основном он был создан с помощью Claude Code, так что в нем наверняка есть следы работы ИИ.
00:00:43Тут также есть PR для новой функции в этом проекте, о которой я расскажу позже, если GitHub случайно не удалит её.
00:00:51Для начала я запущу Fallo с флагом summary через BunX — это удобно, так как его не нужно устанавливать.
00:00:56Это дает мгновенный обзор моего проекта: сводку по мертвому коду, дубликатам и состоянию сложности.
00:01:02Если мы проверим статус git, то увидим новую директорию .fallo, в которой хранится кэш.
00:01:07Благодаря этому последующие запуски команды будут быстрее, а кэш содержит снимки состояния и информацию о плагинах.
00:01:12Вы могли заметить, что показатель здоровья здесь на 41 пункт выше порогового значения.
00:01:16Что же это означает?
00:01:17Показатель здоровья Fallo вычисляется путем определения цикломатической и когнитивной сложности.
00:01:24Используются определенные формулы для расчета плотности сложности.
00:01:27А здесь все это используется для определения индекса поддерживаемости — того самого счета, который мы видим.
00:01:33Исходя из этого счета, система определила, что 41 файл в моем проекте требует рефакторинга.
00:01:38Мы можем запустить любую из этих команд, чтобы получить более подробный отчет по конкретной области.
00:01:43Например, если я хочу сосредоточиться на «здоровье» кода, можно запустить эту команду.
00:01:46Спустя некоторое время она выводит список всех файлов с различными проблемами сложности.
00:01:49Кстати, если вам интересно, что значит CRAP — это аббревиатура от «change risk anti-patterns» (антипаттерны риска изменений),
00:01:55подробнее о которых можно прочитать в документации.
00:01:57Такой уровень детализации позволяет ИИ-агенту легко понять, что именно нужно исправить.
00:02:00На мой взгляд, с дубликатами работать еще проще, так как указывается конкретный файл и номера строк.
00:02:06Так что пока остановимся на этом.
00:02:07При желании можно добавить конфигурационный файл fallo, чтобы исключить определенные паттерны или зависимости,
00:02:14а также настроить параметры поиска дубликатов, оценки здоровья и задать границы (boundaries).
00:02:18Границы — это крутой способ указать, каким директориям разрешен импорт из других.
00:02:23Но для моих нужд это слишком сложно, так что пока оставим настройки по умолчанию.
00:02:27Теперь мы можем запустить команду fallo fix или использовать флаг dry run, чтобы увидеть предстоящие действия.
00:02:32Система попытается устранить все типы проблем, которые поддаются автоматическому исправлению.
00:02:35Как видите, она собирается удалить кучу неиспользуемых экспортов.
00:02:38Но, честно говоря, я не доверяю Fallo автоматическое исправление, так как у инструмента мало контекста о моем коде:
00:02:43за что отвечает каждая функция и как все части связаны между собой.
00:02:46Поэтому вместо флага fix я подключу Fallo к своему агенту.
00:02:49Это можно сделать через MCP-сервер или плагин для VS Code, который, думаю, заработает и в Cursor.
00:02:55Но я пойду простым путем и установлю навык (skill) fallo, который содержит правила для агента и список частых ошибок.
00:03:03Установив навык, я запускаю Claude Code и даю задание: изучи проект, чтобы понять логику работы,
00:03:10затем запусти fallo, чтобы убрать дубликаты кода, следя за тем, чтобы это не нарушило основную функциональность.
00:03:16По завершении создай ветку с изменениями и запусти тесты, чтобы убедиться, что приложение работает исправно.
00:03:22Мы видим, как загружается навык fallo.
00:03:24Затем запускается команда fallo dupes с экспортом в JSON — это удобный формат для машинной обработки.
00:03:29Спустя четыре минуты Claude закончил правку трех файлов вместо всех, что предложил fallo.
00:03:34В основном потому, что остальные — это тесты, где дублирование кода иногда допустимо.
00:03:39Я также попросил его создать PR. Если взглянуть на него, добавлено 54 строки кода, а удалено 43.
00:03:46Это произошло потому, что я попросил добавить конфиг fallo (около 20 строк), чтобы игнорировать тесты в будущем.
00:03:54Разумеется, стоит продолжать в том же духе, используя Claude Code или других агентов для устранения сложности и мертвого кода.
00:04:00Кроме того, fallo умеет проверять пул-реквесты.
00:04:02Взглянем на тот PR, что я показывал: команда fallo audit сравнит текущую ветку с main, чтобы мы могли точечно исправить проблемы.
00:04:12Если нужно сравнить с какой-то другой веткой, можно просто использовать флаг base.
00:04:16А чтобы не просить Claude использовать fallo каждый раз, можно запустить команду setup hooks, которая создаст хуки для Claude Code.
00:04:24Fallo также может работать как GitHub Action с аннотациями прямо в PR.
00:04:28Он поддерживает рабочие пространства (workspaces).
00:04:30Умеет экспортировать бейджи здоровья и поддерживает «базовые линии», позволяя исправлять текущие проблемы постепенно.
00:04:35CI будет фиксировать только новые ошибки, что отлично подходит для приведения в порядок больших проектов.
00:04:41Функций много, но по сути это статический анализ, то есть ваши функции на самом деле не выполняются.
00:04:49Если вам нужно больше, fallo поддерживает «Runtime Intelligence» — она показывает, какие функции вызываются в продакшене при реальном трафике.
00:04:59Это работает через покрытие V8; результаты объединяются с отчетом через sidecar-контейнер, который можно запустить где угодно.
00:05:08Но это уже платная функция, что вполне логично.
00:05:11В целом, fallo — отличный инструмент, которым я буду пользоваться чаще, несмотря на то, что он ограничен стеком JavaScript.
00:05:19Для других языков есть свои решения, но вряд ли они объединяют всё так же удачно. Автор Барт проделал отличную работу: инструмент использует OXC для парсинга и анализа модулей перед графовым анализом.
00:05:36Так что он вряд ли выйдет за рамки JS. Уверен, Эван Ю очень рад — не самому JavaScript, а использованию OXC, ведь этот проект он спонсирует через VoidZero.
00:05:46Кстати, об Эване Ю: если хотите послушать, как мы расспрашиваем его о VoidZero, Vite и серверных компонентах React, посмотрите наш часовой подкаст — один из моих любимых.

Key Takeaway

Fallo автоматизирует глубокий аудит JavaScript-проектов через анализ сложности и дубликатов, предоставляя ИИ-агентам точные данные для рефакторинга без ручного комбинирования множества линтеров.

Highlights

  • Инструмент Fallo написан на языке Rust и поддерживает более 90 плагинов для работы с популярными JavaScript и TypeScript фреймворками.

  • Показатель здоровья кода вычисляется на основе формул цикломатической и когнитивной сложности для определения индекса поддерживаемости.

  • Функция Boundaries позволяет устанавливать строгие правила импорта между конкретными директориями проекта.

  • Интеграция с Claude Code через JSON-экспорт позволяет ИИ-агентам автоматически устранять дубликаты и мертвый код за считанные минуты.

  • Режим Runtime Intelligence использует данные о покрытии V8 для выявления неиспользуемых в продакшене функций при реальном трафике.

  • Команда fallo audit сравнивает текущую ветку с базовой для точечного исправления проблем в пул-реквестах.

Timeline

Возможности и архитектура Fallo

  • Инструмент заменяет связку из NIP, JSC, PD и ESLint для проверки качества кода.
  • Использование Rust и парсера OXC обеспечивает высокую скорость анализа проектов.
  • Поддержка ограничена экосистемой JavaScript и TypeScript.

Централизация инструментов анализа упрощает рабочий процесс разработчика и предотвращает выпуск некачественного кода ИИ-агентами. Архитектура на базе Rust позволяет быстро обрабатывать проекты любой сложности. Встроенная поддержка плагинов гарантирует совместимость с большинством современных инструментов разработки из коробки.

Метрики здоровья и диагностика проекта

  • Директория .fallo хранит снимки состояния и кэш плагинов для ускорения повторных проверок.
  • Индекс поддерживаемости напрямую зависит от плотности цикломатической и когнитивной сложности файлов.
  • Аббревиатура CRAP обозначает антипаттерны, повышающие риск внесения ошибок при изменениях.

Запуск через BunX исключает необходимость локальной установки для получения мгновенной сводки. Система выявляет конкретные файлы, требующие рефакторинга, основываясь на математических формулах сложности. Подробные отчеты по дубликатам включают номера строк, что упрощает навигацию при исправлении структуры проекта.

Автоматизация исправлений через ИИ-агентов

  • Команда fallo dupes с флагом экспорта в JSON подготавливает данные для машинной обработки агентами.
  • ИИ-агент Claude способен устранить критические дубликаты в нескольких файлах за четыре минуты.
  • Конфигурационные файлы позволяют исключать тестовые среды из общего анализа для точности отчетов.

Вместо автоматического режима fallo fix рекомендуется использовать связку инструмента с Claude Code для сохранения контекста логики приложения. Специальный навык (skill) передает агенту правила и список типичных ошибок для более точного редактирования. Это позволяет избежать случайного удаления важного кода в тестах, где дублирование может быть намеренным.

Интеграция в CI/CD и расширенный анализ

  • Команда setup hooks автоматизирует использование проверок при каждом запуске Claude Code.
  • Метод базовых линий (baselines) позволяет фиксировать только новые ошибки в больших проектах.
  • Runtime Intelligence отслеживает реальное выполнение функций в рабочей среде через sidecar-контейнер.

Интеграция с GitHub Actions предоставляет наглядные аннотации непосредственно в интерфейсе пул-реквестов. Поддержка рабочих пространств делает инструмент пригодным для монорепозиториев. Платные функции динамического анализа дополняют статические проверки данными о реальном трафике, что помогает безопасно удалять неиспользуемый в продакшене код.

Community Posts

View all posts