Перейти к содержимому

Совместимость с rg

vendor/bin/rg — оболочка совместимости в стиле ripgrep. Она поддерживает наиболее часто используемые флаги ripgrep, обходит дерево файлов так же, как ripgrep, и выводит совпадения. Подтвержденный набор возможностей составлен по результатам проверок исходного исполняемого файла rg и опубликован в разделе Дополнительно / Матрица возможностей.

Оболочка выполняет лишь тонкий перевод команд CLI; собственно поиск выполняет тот же движок Greph\Text\TextSearcher, что и vendor/bin/greph.

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

Используйте оболочку, если:

  • У вас уже есть инструмент, агент или скрипт, который вызывает rg.
  • Вам нужна готовая замена, работающая в средах, где нельзя установить сам ripgrep (общий хостинг, защищенные контейнеры, платформы PaaS с ограничениями).
  • Вам нужен удобный интерфейс ripgrep в инфраструктуре, где установлен только PHP.

Используйте нативный vendor/bin/greph, если:

  • Вы пишете новый код, и вам не нужен формат ripgrep CLI.
  • Вам нужны нативные флаги, которых нет в оболочке (например, режим AST).

Использование

Командная оболочка
rg [options] pattern [path...]
rg --files [options] [path...]

При запуске без аргументов выполняется рекурсивный поиск в .:

Командная оболочка
./vendor/bin/rg -F "function"

--files перечисляет файлы-кандидаты вместо выполнения поиска:

Командная оболочка
./vendor/bin/rg --files
./vendor/bin/rg --files --type php
./vendor/bin/rg --files --hidden

Вывод JSON

--json выводит данные в форме событий, как и ripgrep:

Командная оболочка
./vendor/bin/rg --json -F "function walk" src/Greph.php
JSON
{"type":"begin","data":{"path":{"text":"src/Greph.php"}}}
{"type":"match","data":{"path":{"text":"src/Greph.php"},"lines":{"text":"    public static function walk(string|array $paths, ?WalkOptions $options = null): FileList\n"},"line_number":41,"absolute_offset":1034,"submatches":[{"match":{"text":"function walk"},"start":18,"end":31}]}}
{"type":"end","data":{"path":{"text":"src/Greph.php"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":0,"human":"0.000000s"},"searches":1,"searches_with_match":1,"bytes_searched":13383,"bytes_printed":282,"matched_lines":1,"matches":1}}}
{"type":"summary","data":{"elapsed_total":{"human":"0.000000s","nanos":0,"secs":0},"stats":{"bytes_printed":282,"bytes_searched":13383,"matched_lines":1,"matches":1,"searches":1,"searches_with_match":1,"elapsed":{"human":"0.000000s","nanos":0,"secs":0}}}}

В объектах stats время всегда указывается как ноль.

Это схема, которую ожидают нижестоящие инструменты при включении структурированного вывода ripgrep. Для более простого формата используйте vendor/bin/greph --json.

Проверенный набор возможностей

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

Флаги поиска

  • -F, --fixed-strings
  • -i, --ignore-case
  • -w, --word-regexp
  • -v, --invert-match
  • -c, --count
  • -l, --files-with-matches
  • --files-without-match
  • -I, --no-filename
  • -H, --with-filename
  • -n, --line-number
  • -A N, --after-context N
  • -B N, --before-context N
  • -C N, --context N
  • -m N, --max-count N
  • -e P, --regexp P

Флаги обхода

  • -L, --follow
  • --glob GLOB
  • --type NAME
  • --type-not NAME
  • --no-ignore
  • --hidden
  • --files
  • --files --hidden
  • --files --type NAME

Флаги вывода

  • --json

Принятые без проверки

Оболочка также принимает следующие флаги, но их проверка пока не включена в матрицу возможностей:

Ограничения

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

  • Многострочные регулярные выражения (-U, --multiline)
  • Замена (-r, --replace) в текстовом режиме (вместо этого используйте переписывание AST vendor/bin/greph)
  • Пользовательские определения типов (--type-add, --type-clear)
  • Флаги кодировки (-E, --encoding)
  • Скрипты фильтров --pre
  • --sort, --sortr

Если нужного флага нет, создайте задачу и приложите проверку, выполненную на исходном rg, а также ожидаемый результат. Новые функции добавляются вместе с эталонными проверками, поэтому подтвержденный набор возможностей постоянно расширяется.

Соответствие поведению

Оболочка стремится соответствовать поведению, а не байтовому представлению. Строки вывода эквивалентны, но отдельные визуальные детали могут различаться (коды цветов, усечение по ширине терминала). Проверки для матрицы возможностей оценивают семантическую эквивалентность, а не побайтовое совпадение.

В инструментах и агентах, которые разбирают вывод, поля, важные для парсера (путь к файлу, номер строки, содержимое, позиция совпадения), побайтово совпадают с исходным rg во всех проверках.