Compatibilidade com rg
vendor/bin/rg é um wrapper de compatibilidade no estilo ripgrep. Ele aceita os sinalizadores ripgrep mais usados, percorre a árvore de arquivos da mesma forma que ripgrep e emite a saída correspondente. A interface verificada foi reproduzida a partir de sondagens do binário upstream rg e está em Avançado / Matriz de recursos.
O wrapper é um tradutor CLI enxuto; a pesquisa propriamente dita é feita pelo mesmo mecanismo Greph\Text\TextSearcher usado por vendor/bin/greph.
Quando usar
Use o wrapper quando:
- Você tem uma ferramenta, um agente ou um script existente que já chama
rg. - Você quer uma substituição direta que funcione em ambientes nos quais não é possível instalar ripgrep (hospedagem compartilhada, contêineres reforçados, PaaS restrita).
- Você quer a praticidade de ripgrep em uma infraestrutura que só oferece PHP.
Use vendor/bin/greph nativo quando:
- Você está escrevendo código novo e não precisa do formato ripgrep CLI.
- Você quer acesso a sinalizadores nativos que o wrapper não oferece (por exemplo, o modo AST).
Uso
rg [options] pattern [path...]
rg --files [options] [path...]
Uma chamada sem argumentos pesquisa . recursivamente:
./vendor/bin/rg -F "function"
--files lista arquivos candidatos em vez de pesquisar:
./vendor/bin/rg --files
./vendor/bin/rg --files --type php
./vendor/bin/rg --files --hidden
Saída JSON
--json emite a mesma carga em formato de evento que ripgrep produz:
./vendor/bin/rg --json -F "function walk" src/Greph.php
{"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}}}}
Os tempos nos objetos stats são sempre informados como zero.
Este é o esquema esperado pelas ferramentas subsequentes quando ativam a saída estruturada de ripgrep. Para um formato mais simples, use vendor/bin/greph --json.
Interface verificada
Os sinalizadores a seguir foram verificados em relação ao próprio rg na matriz de recursos. O binário upstream e o wrapper produzem saídas equivalentes para cada sondagem. Quando um sinalizador tem uma forma curta e outra longa, a sondagem usa uma delas e o wrapper interpreta ambas como a mesma opção.
Sinalizadores de pesquisa
-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
Sinalizadores do percurso
-L,--follow--glob GLOB--type NAME--type-not NAME--no-ignore--hidden--files--files --hidden--files --type NAME
Sinalizadores de saída
--json
Aceitos sem sondagem
O wrapper também aceita estes sinalizadores, mas nenhuma sondagem da matriz de recursos os cobre ainda:
-j N,--threads N(número de workers; consulte Workers paralelos)-q,--quiet--no-follow
Limitações
O wrapper de rg de Greph cobre a interface de pesquisa e percurso usada pela maioria das ferramentas e agentes. No momento, não oferece os seguintes recursos ripgrep:
- Expressão regular multilinha (
-U,--multiline) - Substituição (
-r,--replace) no modo de texto (use a reescrita ASTvendor/bin/greph) - Definições de tipo personalizadas (
--type-add,--type-clear) - Sinalizadores de codificação (
-E,--encoding) - Scripts de filtro
--pre --sort,--sortr
Se estiver faltando um sinalizador, abra uma issue com a sondagem executada no rg upstream e a saída esperada. Os novos recursos são adicionados junto com suas sondagens de referência, ampliando a interface verificada.
Paridade de comportamento
O wrapper busca paridade de comportamento, não paridade byte a byte. As saídas são equivalentes linha a linha, mas podem diferir em detalhes visuais (códigos de cor, truncamento pela largura do terminal). As sondagens usadas na matriz de recursos verificam a equivalência semântica, não diferenças byte a byte.
Para agentes e ferramentas que analisam a saída, os campos relevantes para o analisador (caminho do arquivo, número da linha, conteúdo, posição da correspondência) são idênticos byte a byte aos do rg upstream em cada sondagem verificada.