# Grep

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

## Когда использовать

- Поиск всех мест вызова функции или всех ссылок на идентификатор
- Проверка, встречается ли строка или сообщение об ошибке где-либо в кодовой базе
- Подсчёт вхождений паттерна для оценки масштаба перед рефакторингом
- Сужение поиска до типа файлов (`type: "ts"`) или glob (`glob: "**/*.tsx"`)
- Извлечение многострочных совпадений, таких как многострочные определения структур или блоки JSX, с `multiline: true`

## Параметры

- `pattern` (string, обязательный): регулярное выражение для поиска. Использует синтаксис ripgrep, поэтому буквальные фигурные скобки нужно экранировать (например, `interface\{\}` для поиска `interface{}`).
- `path` (string, необязательный): файл или каталог для поиска. По умолчанию — текущий рабочий каталог.
- `glob` (string, необязательный): фильтр имён файлов, например `*.js` или `*.{ts,tsx}`.
- `type` (string, необязательный): сокращение по типу файла, например `js`, `py`, `rust`, `go`. Эффективнее `glob` для стандартных языков.
- `output_mode` (enum, необязательный): `files_with_matches` (по умолчанию, возвращает только пути), `content` (возвращает совпавшие строки) или `count` (возвращает подсчёты совпадений).
- `-i` (boolean, необязательный): нечувствительное к регистру сопоставление.
- `-n` (boolean, необязательный): включать номера строк в режиме `content`. По умолчанию `true`.
- `-A` (number, необязательный): строк контекста после каждого совпадения (требует режима `content`).
- `-B` (number, необязательный): строк контекста перед каждым совпадением (требует режима `content`).
- `-C` / `context` (number, необязательный): строк контекста с обеих сторон каждого совпадения.
- `multiline` (boolean, необязательный): разрешить паттернам пересекать переводы строк (`.` совпадает с `\n`). По умолчанию `false`.
- `head_limit` (number, необязательный): ограничить возвращаемые строки, пути файлов или записи подсчётов. По умолчанию 250; передайте `0` для неограниченного (используйте экономно).
- `offset` (number, необязательный): пропустить первые N результатов перед применением `head_limit`. По умолчанию `0`.

## Примеры

### Пример 1: найти все места вызова функции
Задайте `pattern: "registerHandler\\("`, `output_mode: "content"` и `-C: 2`, чтобы увидеть окружающие строки каждого вызова.

### Пример 2: подсчёт совпадений по типу
Задайте `pattern: "TODO"`, `type: "py"` и `output_mode: "count"`, чтобы увидеть пофайловые итоги TODO по исходникам Python.

### Пример 3: многострочное совпадение по структуре
Используйте `pattern: "struct Config \\{[\\s\\S]*?version"` с `multiline: true`, чтобы захватить поле, объявленное на несколько строк внутри Go-структуры.

## Примечания

- Всегда предпочитайте `Grep` запуску `grep` или `rg` через `Bash`; инструмент оптимизирован для корректных прав и структурированного вывода.
- Режим вывода по умолчанию — `files_with_matches`, самый дешёвый. Переключайтесь на `content` только когда нужно видеть сами строки.
- Флаги контекста (`-A`, `-B`, `-C`) игнорируются, если `output_mode` не `content`.
- Большие наборы результатов сжигают токены контекста. Используйте `head_limit`, `offset` или более узкие фильтры `glob`/`type`, чтобы оставаться сфокусированным.
- Для поиска по именам файлов используйте `Glob`; для открытых исследований, растянутых на много раундов, отправляйте `Agent` с агентом Explore.
