# 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`