Hoppa till innehåll

PHP API

Greph\Greph

Klassen Greph\Greph är den statiska startpunkten. Den tillhandahåller alla sök-, omskrivnings- och indexeringsåtgärder. Alla metoder godtar antingen en enskild sökväg eller en lista med sökvägar.

PHP
use Greph\Greph;

walk

PHP
public static function walk(string|array $paths, ?WalkOptions $options = null): FileList

Lös upp $paths till en platt FileList med absoluta filsökvägar. Tar hänsyn till gitignore, .grephignore, filtypsfilter, glob-mönster, inkludering av dolda filer, följning av symboliska länkar, binärdetektering och gränsen för maximal filstorlek.

PHP
use Greph\Walker\WalkOptions;
use Greph\Walker\FileTypeFilter;

$files = Greph::walk('src', new WalkOptions(
    fileTypeFilter: new FileTypeFilter(['php']),
));

foreach ($files->paths() as $path) {
    echo "$path\n";
}

searchText

PHP
public static function searchText(
    string $pattern,
    string|array $paths,
    ?TextSearchOptions $options = null,
): array

Kör en textsökning och returnera ett list<TextFileResult>. Varje TextFileResult visar filsökvägen och en lista med TextMatch-objekt (rad, kolumn, innehåll, fångster, valfritt sammanhang).

PHP
use Greph\Greph;
use Greph\Text\TextSearchOptions;

$results = Greph::searchText(
    'function',
    'src',
    new TextSearchOptions(
        fixedString: true,
        caseInsensitive: true,
        beforeContext: 1,
        afterContext: 1,
        jobs: 4,
    ),
);

foreach ($results as $file) {
    foreach ($file->matches as $match) {
        echo "{$file->file}:{$match->line}:{$match->content}\n";
    }
}

När jobs > 1 och filantalet överskrider arbetartröskeln skickar searchText automatiskt genomsökningen till en WorkerPool. Annars körs den i processen.


searchAst

PHP
public static function searchAst(
    string $pattern,
    string|array $paths,
    ?AstSearchOptions $options = null,
): array

Kör en strukturell AST-sökning och returnera ett list<AstMatch>. Mönster skrivs som PHP-kod med metavariablerna $VAR och $$$VARIADIC. Varje AstMatch innehåller filen, den fångade PhpParser\Node, fångsterna, start- och slutrad samt bytepositioner och det matchade källkodsstycket.

PHP
use Greph\Greph;
use Greph\Ast\AstSearchOptions;

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

foreach ($matches as $match) {
    echo "{$match->file}:{$match->startLine}:{$match->code}\n";
}

rewriteAst

PHP
public static function rewriteAst(
    string $searchPattern,
    string $rewritePattern,
    string|array $paths,
    ?AstSearchOptions $options = null,
): array

Kör en strukturell omskrivning och returnera ett list<RewriteResult>. Varje RewriteResult visar filsökvägen, det ursprungliga innehållet, det omskrivna innehållet och antalet ersättningar. Omskrivningar bevarar formateringen: endast de matchade nodintervallen ersätts; resten av filen lämnas orörd.

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

foreach ($rewrites as $result) {
    if ($result->changed()) {
        file_put_contents($result->file, $result->rewrittenContents);
    }
}

Fasaden skriver inte till disk; anroparen avgör om ändringarna ska tillämpas. CLI tillämpar dem om inte --dry-run eller --interactive har angetts.


buildTextIndex

PHP
public static function buildTextIndex(
    string $rootPath = '.',
    ?string $indexPath = null,
    IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): IndexBuildResult

Bygg ett nytt index över trigram och identifierarens förekomster för $rootPath. Indexet lagras på $indexPath (standardvärdet är $rootPath/.greph-index). $lifecycle kan vara static, manual-refresh, opportunistic-refresh eller strict-stale-check. Returnerar ett IndexBuildResult med antal filer, antal trigram och antal tillagda, uppdaterade, borttagna och oförändrade poster.

refreshTextIndex

PHP
public static function refreshTextIndex(
    string $rootPath = '.',
    ?string $indexPath = null,
    IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): IndexBuildResult

Uppdatera ett befintligt textindex stegvis. Filer hashas om och endast ändrade poster skrivs om.

searchTextIndexed

PHP
public static function searchTextIndexed(
    string $pattern,
    string|array $paths,
    ?TextSearchOptions $options = null,
    ?string $indexPath = null,
): array

Kör en textsökning mot det uppvärmda indexet. Ger ett körningsfel om indexet inte finns (anropa buildTextIndex först). Returnerar ett list<TextFileResult> med exakt samma struktur som searchText.

PHP
Greph::buildTextIndex('.');
$results = Greph::searchTextIndexed('function', 'src');

searchTextIndexedMany

PHP
public static function searchTextIndexedMany(
    string $pattern,
    string|array $paths,
    array $indexPaths,
    ?TextSearchOptions $options = null,
): array

Kör textsökning med uppvärmt index i flera textindexkataloger. Greph söker i varje tillämpligt index, tar bort dubbletter utifrån absoluta filsökvägar och använder genomsökning i ursprungligt läge endast för sökvägar utanför alla angivna indexrötter.

loadIndexSet

PHP
public static function loadIndexSet(?string $manifestPath = null): IndexSet

Läs in ett indexuppsättningsmanifest med standardvärdet .greph-index-set.json i den aktuella arbetskatalogen.

searchTextIndexedSet

PHP
public static function searchTextIndexedSet(
    string $pattern,
    string|array $paths,
    ?TextSearchOptions $options = null,
    ?string $manifestPath = null,
    array $entryNames = [],
): array

Lös upp de valda posterna text från ett indexuppsättningsmanifest och kör motsvarigheten till searchTextIndexedMany.


buildAstIndex / refreshAstIndex

PHP
public static function buildAstIndex(
    string $rootPath = '.',
    ?string $indexPath = null,
    IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): AstIndexBuildResult
public static function refreshAstIndex(
    string $rootPath = '.',
    ?string $indexPath = null,
    IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): AstIndexBuildResult

Bygg eller uppdatera AST-faktindexet stegvis. Extraherade fakta lagras som standard på $rootPath/.greph-ast-index.

searchAstIndexed

PHP
public static function searchAstIndexed(
    string $pattern,
    string|array $paths,
    ?AstSearchOptions $options = null,
    ?string $indexPath = null,
): array

Använd faktindexet för att begränsa kandidaterna innan matchningar verifieras på nytt mot källkoden. Returnerar samma list<AstMatch>-struktur som searchAst.

searchAstIndexedMany

PHP
public static function searchAstIndexedMany(
    string $pattern,
    string|array $paths,
    array $indexPaths,
    ?AstSearchOptions $options = null,
): array

Kör AST-faktasökning med uppvärmt index i flera AST-indexkataloger.

searchAstIndexedSet

PHP
public static function searchAstIndexedSet(
    string $pattern,
    string|array $paths,
    ?AstSearchOptions $options = null,
    ?string $manifestPath = null,
    array $entryNames = [],
): array

Lös upp de valda posterna ast-index från ett indexuppsättningsmanifest och kör motsvarigheten till searchAstIndexedMany.

buildAstCache / refreshAstCache

PHP
public static function buildAstCache(
    string $rootPath = '.',
    ?string $indexPath = null,
    IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): AstCacheBuildResult
public static function refreshAstCache(
    string $rootPath = '.',
    ?string $indexPath = null,
    IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): AstCacheBuildResult

Bygg eller uppdatera det cachade lagret med parsade träd stegvis. Serialiserade träd lagras som standard på $rootPath/.greph-ast-cache.

searchAstCached

PHP
public static function searchAstCached(
    string $pattern,
    string|array $paths,
    ?AstSearchOptions $options = null,
    ?string $indexPath = null,
): array

Kör AST-sökning mot de cachade, parsade träden och hoppa över parsaren helt. Returnerar samma list<AstMatch>-struktur som searchAst.

searchAstCachedMany

PHP
public static function searchAstCachedMany(
    string $pattern,
    string|array $paths,
    array $indexPaths,
    ?AstSearchOptions $options = null,
): array

Kör AST-sökning med uppvärmd cache i flera cachekataloger.

searchAstCachedSet

PHP
public static function searchAstCachedSet(
    string $pattern,
    string|array $paths,
    ?AstSearchOptions $options = null,
    ?string $manifestPath = null,
    array $entryNames = [],
): array

Lös upp de valda posterna ast-cache från ett indexuppsättningsmanifest och kör motsvarigheten till searchAstCachedMany.


Greph\Text\TextSearchOptions

Skrivskyddat alternativobjekt för textsökning.

PHP
new TextSearchOptions(
    bool $fixedString = false,
    bool $caseInsensitive = false,
    bool $wholeWord = false,
    bool $invertMatch = false,
    ?int $maxCount = null,
    int $beforeContext = 0,
    int $afterContext = 0,
    bool $countOnly = false,
    bool $filesWithMatches = false,
    bool $filesWithoutMatches = false,
    bool $jsonOutput = false,
    bool $tracePlan = false,
    int $jobs = 1,
    bool $respectIgnore = true,
    bool $includeHidden = false,
    bool $followSymlinks = false,
    bool $skipBinaryFiles = true,
    bool $includeGitDirectory = false,
    ?FileTypeFilter $fileTypeFilter = null,
    int $maxFileSizeBytes = 10485760,
    array $globPatterns = [],
    bool $showLineNumbers = true,
    bool $showFileNames = true,
)

Validering:

  • jobs >= 1
  • beforeContext, afterContext >= 0
  • maxCount === null || maxCount >= 1

Använd walkOptions() för att härleda matchande WalkOptions om du vill gå igenom filträdet separat.

tracePlan används av sökare med uppvärmt index, och flödet greph-index CLI skickar planerardiagnostik till stderr. Själva den inbyggda searchText använder det inte.


Greph\Ast\AstSearchOptions

Skrivskyddat alternativobjekt för AST-sökning och omskrivning.

PHP
new AstSearchOptions(
    string $language = 'php',
    int $jobs = 1,
    bool $respectIgnore = true,
    bool $includeHidden = false,
    bool $followSymlinks = false,
    bool $skipBinaryFiles = true,
    bool $includeGitDirectory = false,
    ?FileTypeFilter $fileTypeFilter = null,
    int $maxFileSizeBytes = 10485760,
    array $globPatterns = [],
    bool $skipParseErrors = true,
    bool $dryRun = false,
    bool $interactive = false,
    bool $jsonOutput = false,
    bool $tracePlan = false,
)

Standardfiltret för filtyper i AST-läget är php. När skipParseErrors är true (standardvärdet) hoppas filer som inte kan parsas tyst över; ändra det till false för att visa parsningsfel som undantag. tracePlan används av AST-sökare med uppvärmt index och greph-index ast-index|ast-cache search för att visa diagnostik när kandidater gallras bort.


Greph\Walker\WalkOptions

Skrivskyddat alternativobjekt för filvandraren.

PHP
new WalkOptions(
    bool $respectIgnore = true,
    bool $includeHidden = false,
    bool $followSymlinks = false,
    bool $skipBinaryFiles = false,
    bool $includeGitDirectory = false,
    ?FileTypeFilter $fileTypeFilter = null,
    int $maxFileSizeBytes = 10485760,
    array $globPatterns = [],
)

Greph\Walker\FileTypeFilter

Lös upp namngivna filtyper till listor med filändelser. Inbyggda alias:

Alias Filändelser
css css, sass, scss
html htm, html, phtml
js cjs, js, mjs
json json
md markdown, md
php inc, php, php3, php4, php5, php7, php8, phpt, phtml
txt txt
ts ts, tsx
xml xml
yaml yaml, yml
PHP
new FileTypeFilter(includeTypes: ['php'], excludeTypes: ['md']);

Resultatobjekt

Greph\Text\TextFileResult

PHP
final readonly class TextFileResult
{
    public string $file;
    /** @var list<TextMatch> */
    public array $matches;

    public function matchCount(): int;
    public function hasMatches(): bool;
}

Greph\Text\TextMatch

PHP
final readonly class TextMatch
{
    public string $file;
    public int $line;
    public int $column;
    public string $content;
    public string $matchedText;
    /** @var array<int|string, string> */
    public array $captures;
    /** @var list<array{line: int, content: string}> */
    public array $beforeContext;
    /** @var list<array{line: int, content: string}> */
    public array $afterContext;
}

Greph\Ast\AstMatch

PHP
final readonly class AstMatch
{
    public string $file;
    public PhpParser\Node $node;
    /** @var array<string, mixed> */
    public array $captures;
    public int $startLine;
    public int $endLine;
    public int $startFilePos;
    public int $endFilePos;
    public string $code;
}

Greph\Ast\RewriteResult

PHP
final readonly class RewriteResult
{
    public string $file;
    public string $originalContents;
    public string $rewrittenContents;
    public int $replacementCount;

    public function changed(): bool;
}

Greph\Index\IndexBuildResult

PHP
final readonly class IndexBuildResult
{
    public string $rootPath;
    public string $indexPath;
    public int $fileCount;
    public int $trigramCount;
    public int $addedFiles;
    public int $updatedFiles;
    public int $deletedFiles;
    public int $unchangedFiles;
}

AstIndexBuildResult och AstCacheBuildResult följer samma struktur med factCount respektive cachedTreeCount insatta.


Undantag

Greph kastar tre typade undantag, alla i Greph\Exceptions:

Undantag När det kastas
WalkerException Filsystemfel vid genomsökning (sökväg saknas, katalogen kan inte läsas)
PatternException Ogiltigt regex eller AST-mönster
ParseException Källkoden för PHP kunde inte parsas (endast när skipParseErrors: false)

Indexerade sökmetoder kastar \RuntimeException när det inte finns något index på den begärda platsen. greph-index CLI har ett alternativ --fallback scan som fångar dessa fel och i stället gör en genomsökning utan index.