Hoppa till innehåll

Introduktion

Greph är en ren PHP-motor för sökning i och refaktorering av källkodsträd. Den har tre närbesläktade lägen:

  • Textsökning med grep-kompatibla utdata och ergonomi i stil med ripgrep.
  • AST-sökning med strukturella mönster och metavariabler i PHP.
  • AST-omskrivning med strukturell refaktorering som bevarar formateringen.

Verktyget innehåller även uppvärmda indexerade lägen för både text- och AST-arbetsbelastningar, uppdateringspolicyer som tar hänsyn till livscykeln, uppvärmda indexuppsättningar med manifest och kompatibilitetsomslag för rg / sg för verktygs- och agentmiljöer.

Varför Greph finns

PHP-applikationer och agenter som behöver snabb kodsökning brukar anropa inbyggda verktyg via skalet (grep, ripgrep, ast-grep), vilket försämrar portabiliteten och försvårar driftsättningen. Strukturell sökning och omskrivning är ännu krångligare: det innebär vanligtvis att lämna PHP-processen helt.

Greph fyller den luckan. Din PHP-kod kan göra textsökningar, strukturella matchningar och refaktorerande omskrivningar med endast standardbiblioteket plus nikic/php-parser. Utdata och slutkoder är kompatibla med de kanoniska verktygen, så befintliga skript och agenter behöver inte ändras.

Vad det gör

  • Textsökning med fasta strängar och reguljära uttryck, med lägen för hela ord, skiftlägesokänslighet, kontext, antal och endast filer
  • Strukturell PHP AST-sökning med $VAR, $$$VARIADIC och upprepade metavariabler
  • Formateringsbevarande AST-omskrivning med lägen för torrkörning, interaktiv körning och skrivning
  • Uppvärmda textindex (trigram + identifierarpostningar) för återkommande arbetsbelastningar
  • Uppvärmt AST-faktindex och cachad AST-sökning för återkommande strukturella frågor
  • Uppvärmda index med livscykelhantering: static, manual-refresh, opportunistic-refresh, strict-stale-check
  • Sökning med flera index och namngivna uppsättningar bland uppvärmda text-, AST-fakta- och AST-cachelagringar
  • Planeringsdiagnostik med --trace-plan och märkning av indexursprung för uppvärmda sökningar
  • Kompatibilitetsomslag för ripgrep och ast-grep CLI som använder samma motor
  • Parallell arbetsprocesspool baserad på pcntl med återgång till en enda process
  • Filsökare som tar hänsyn till gitignore och .grephignore samt identifierar binärfiler

Vad det kräver

  • PHP 8.2 eller senare
  • ext-json, ext-ctype och ext-tokenizer, som är aktiverade i nästan varje PHP-bygge
  • ext-zlib för det cachade AST-lagret (greph-index ast-cache)
  • nikic/php-parser (det enda Composer-beroendet)

De centrala text- och AST-funktionerna körs i ren PHP. Valfria jämförelser i prestandatester är beroende av externa verktyg som rg, grep och sg, men Greph behöver dem inte för att fungera. Parallella genomsökningar använder ext-pcntl när det är tillgängligt och återgår smidigt till en enda process när det saknas. Värdar som förbjuder proc_open() och shell_exec() behandlas i Värdar med processbegränsningar.

Snabbexempel

De körbara filerna vendor/bin behöver Greph 0.2.3 eller senare när Greph installeras som ett beroende i ditt projekt.

Shell
# Text search
vendor/bin/greph -F "function" src

# Structural search
vendor/bin/greph -p 'new $CLASS()' src

# Structural rewrite preview
vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src
PHP
use Greph\Greph;
use Greph\Ast\AstSearchOptions;
use Greph\Text\TextSearchOptions;

$matches = Greph::searchText(
    'function',
    'src',
    new TextSearchOptions(fixedString: true),
);

$asts = Greph::searchAst(
    'new $CLASS()',
    'src',
    new AstSearchOptions(),
);

$rewrites = Greph::rewriteAst(
    'array($$$ITEMS)',
    '[$$$ITEMS]',
    'src',
);

Börja med Kom igång och använd sedan CLI och API för resten av funktionerna. Avsnitten Lägen, Indexerad och Kompatibilitet går igenom särskilda arbetsflöden på djupet.