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, посмотрите наш часовой подкаст — один из моих любимых.