Treci la conținut

Compatibilitate cu rg

vendor/bin/rg este un wrapper de compatibilitate în stilul ripgrep. Acceptă cele mai utilizate opțiuni ripgrep, parcurge arborele de fișiere la fel ca ripgrep și emite rezultatele care se potrivesc. Interfața verificată, reprodusă pe baza testelor efectuate cu binarul upstream rg, este disponibilă în Avansat / Matricea de funcționalități.

Wrapperul este un traducător simplu CLI; căutarea propriu-zisă este efectuată de același motor Greph\Text\TextSearcher pe care îl folosește vendor/bin/greph.

Când să îl folosiți

Folosiți wrapperul când:

  • Aveți deja un instrument, agent sau script care apelează rg.
  • Doriți un înlocuitor direct care funcționează în medii în care nu puteți instala ripgrep propriu-zis (găzduire partajată, containere securizate, platforme PaaS cu restricții).
  • Doriți ușurința în utilizare a ripgrep pe infrastructură care oferă numai PHP.

Folosiți vendor/bin/greph nativ când:

  • Scrieți cod nou și nu aveți nevoie de forma ripgrep CLI.
  • Doriți acces la opțiuni native pe care wrapperul nu le expune (de exemplu, modul AST).

Utilizare

Shell
rg [options] pattern [path...]
rg --files [options] [path...]

O invocare fără argumente caută recursiv în .:

Shell
./vendor/bin/rg -F "function"

--files listează fișierele candidate în loc să caute:

Shell
./vendor/bin/rg --files
./vendor/bin/rg --files --type php
./vendor/bin/rg --files --hidden

Ieșire JSON

--json emite aceeași încărcătură utilă structurată ca evenimente pe care o produce ripgrep:

Shell
./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}}}}

Duratele din obiectele stats sunt întotdeauna raportate ca zero.

Aceasta este schema pe care o așteaptă instrumentele din aval când activează ieșirea structurată a lui ripgrep. Pentru o structură mai simplă, folosiți vendor/bin/greph --json.

Interfață verificată

Următoarele opțiuni au fost verificate chiar în rg și sunt listate în matricea de funcționalități. Binarul upstream și wrapperul produc rezultate echivalente pentru fiecare test. Când o opțiune are o formă scurtă și una lungă, testul folosește una dintre ele, iar wrapperul le interpretează pe amândouă ca aceeași opțiune.

Opțiuni de căutare

  • -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

Opțiuni pentru parcurgere

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

Opțiuni de ieșire

  • --json

Acceptate fără un test de verificare

Wrapperul acceptă și următoarele opțiuni, pentru care încă nu există teste în matricea de funcționalități:

  • -j N, --threads N (numărul de lucrători; consultați Lucrători paraleli)
  • -q, --quiet
  • --no-follow

Limitări

Wrapperul rg al Greph acoperă funcțiile de căutare și parcurgere pe care le folosesc majoritatea instrumentelor și agenților. În prezent, nu expune următoarele funcții ripgrep:

  • Expresii regulate pe mai multe linii (-U, --multiline)
  • Înlocuire (-r, --replace) în modul text (folosiți în schimb rescrierea AST vendor/bin/greph)
  • Definiții de tipuri personalizate (--type-add, --type-clear)
  • Opțiuni pentru codificare (-E, --encoding)
  • Scripturi de filtrare --pre
  • --sort, --sortr

Dacă vă lipsește o opțiune, raportați problema și includeți testul efectuat cu rg upstream și rezultatul așteptat. Funcțiile noi sunt adăugate împreună cu testele lor de referință, astfel încât interfața verificată să se extindă în continuare.

Paritate de comportament

Wrapperul urmărește paritatea de comportament, nu identitatea la nivel de octet. Liniile din ieșire sunt echivalente, dar detaliile cosmetice pot diferi (coduri de culoare, trunchiere în funcție de lățimea terminalului). Testele folosite de matricea de funcționalități verifică echivalența semantică, nu diferențele exacte la nivel de octet.

Pentru agenții și instrumentele care analizează ieșirea, câmpurile relevante pentru analizator (calea fișierului, numărul liniei, conținutul, poziția potrivirii) sunt identice la nivel de octet cu cele din rg upstream pentru fiecare test verificat.