# Grep

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

## Коли використовувати

- Пошук кожного місця виклику функції чи кожного посилання на ідентифікатор
- Перевірка, чи зʼявляється рядок чи повідомлення про помилку будь-де в кодовій базі
- Підрахунок входжень шаблону для оцінки впливу перед рефакторингом
- Звуження пошуку до типу файлу (`type: "ts"`) чи глоба (`glob: "**/*.tsx"`)
- Отримання багаторядкових збігів, таких як багаторядкові визначення struct чи блоки 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: Багаторядковий збіг struct
Використовуйте `pattern: "struct Config \\{[\\s\\S]*?version"` з `multiline: true`, щоб захопити поле, оголошене на кілька рядків у Go-struct.

## Примітки

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