f2b0db4d9a
- .claude/rules/search-tools.md — матрица: ast-index (символы/usages/callers/outline), vex (semantic/similar/pattern/duplicates/show) - usages/callers по JS — только ast-index (vex пропускает) - CLAUDE.md и ast-index.md ссылаются на новое правило Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Search Tools — когда ast-index, когда vex
Два инструмента поиска по коду. Grep по-прежнему запрещён (см. ast-index.md).
Правило одной строкой
- Знаешь имя символа / нужны usages / callers / outline → ast-index
- Ищешь по смыслу / похожее / дубликаты / AST-паттерн / компактное тело → vex
ast-index — дефолт
Быстрее (1–10 мс) и точнее на этом vanilla-JS проекте. ВСЕГДА первым для:
| Задача | Команда |
|---|---|
| Класс / функция по имени | ast-index class "X" · ast-index symbol "x" |
| Использования | ast-index usages "X" |
| Кто вызывает / иерархия | ast-index callers "x" · ast-index call-tree "x" |
| Структура файла | ast-index outline "path" |
| Поиск в файле | ast-index search "kw" --in-file "f" |
⚠️ usages / callers на чистом JS — ТОЛЬКО ast-index. vex их пропускает (JS у vex не
binder-язык). Проверено: vex usages "audit" → пусто, ast-index usages "audit" → все 10.
vex — по смыслу и структуре
Для того, чего ast-index не умеет. Бинарник: C:\Users\Home\bin\vex.exe (в новых терминалах — vex).
Индекс собран с --semantic.
| Задача | Команда |
|---|---|
| Поиск по смыслу (имя неизвестно) | vex search "что делает код" --semantic |
| Семантически похожие символы | vex similar "Name" |
| AST-паттерн (как ast-grep) | vex pattern --lang js 'function $NAME($$$)' |
| Near-дубликаты | vex duplicates --threshold 0.95 |
| Компактное тело символа (экономия токенов) | vex show "Name" |
| Всё про символ за 1 вызов | vex bundle --mode symbol --symbol Name |
Особенности CLI: search / usages / show берут индекс текущей папки и НЕ принимают --path;
pattern требует --lang + --path.
Поддержание индексов
- ast-index:
ast-index update(после pull) ·ast-index rebuild(после новых файлов) - vex:
vex update(инкрементально, сохраняет semantic из манифеста) ·vex index --semantic(полный) - Обновить сам бинарник vex:
vex self-update