Siirry sisältöön

PHP API

Greph\Greph

Greph\Greph-luokka on staattinen aloituspiste. Se tarjoaa kaikki haku-, uudelleenkirjoitus- ja indeksointitoiminnot. Kaikki metodit hyväksyvät joko yhden polun tai polkuluettelon.

PHP
use Greph\Greph;

walk

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

Ratkaise $paths tasaiseksi FileList-luetteloksi absoluuttisia tiedostopolkuja. Noudattaa gitignore- ja .grephignore-sääntöjä, tiedostotyyppisuodattimia, glob-kaavoja, piilotiedostojen sisällyttämistä, symbolisten linkkien seurantaa, binääritiedostojen tunnistusta ja tiedostokoon enimmäisrajaa.

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

Suorita tekstihaku ja palauta list<TextFileResult>. Kukin TextFileResult sisältää tiedostopolun ja luettelon TextMatch-objekteista (rivi, sarake, sisältö, osumat ja valinnainen konteksti).

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";
    }
}

Kun jobs > 1 ja tiedostomäärä ylittää työntekijäkynnyksen, searchText lähettää skannauksen automaattisesti WorkerPool:lle. Muussa tapauksessa se suoritetaan prosessin sisällä.


searchAst

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

Suorita rakenteellinen AST-haku ja palauta list<AstMatch>. Kaavat kirjoitetaan PHP-lähdekoodina, jossa käytetään $VAR- ja $$$VARIADIC-metamuuttujia. Kukin AstMatch sisältää tiedoston, talteen otetun PhpParser\Node:n, osumat, alku- ja loppurivin sekä tavujen siirtymät ja osuvan lähdekoodijakson.

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

Suorita rakenteellinen uudelleenkirjoitus ja palauta list<RewriteResult>. Kukin RewriteResult sisältää tiedostopolun, alkuperäisen sisällön, uudelleenkirjoitetun sisällön ja korvausten määrän. Uudelleenkirjoitus säilyttää muotoilun: vain osuvien solmujen alueet korvataan, ja muu tiedosto jätetään ennalleen.

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

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

Julkinen rajapinta ei kirjoita levylle; kutsuja päättää, ottaako se muutokset käyttöön. CLI ottaa ne käyttöön, ellei --dry-run tai --interactive ole asetettu.


buildTextIndex

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

Rakenna uusi trigrammi- ja tunnisteindeksi kohteelle $rootPath. Indeksi tallennetaan polkuun $indexPath (oletus $rootPath/.greph-index). $lifecycle voi olla static, manual-refresh, opportunistic-refresh tai strict-stale-check. Palauttaa IndexBuildResult-olion, jossa ovat tiedostojen ja trigrammien määrät sekä lisättyjen, päivitettyjen, poistettujen ja muuttumattomien määrä.

refreshTextIndex

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

Päivitä olemassa oleva teksti-indeksi vaiheittain. Tiedostot hajautetaan uudelleen, ja vain muuttuneet kohteet kirjoitetaan uudestaan.

searchTextIndexed

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

Suorita tekstihaku lämpimästä indeksistä. Jos indeksiä ei ole olemassa, palauttaa suorituksenaikaisen virheen (kutsu ensin buildTextIndex). Palauttaa list<TextFileResult>-olion, jonka rakenne vastaa täsmälleen searchText:ta.

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

Suorita tekstihaku lämpimänä useista tekstihakemistohakemistoista. Greph hakee kustakin soveltuvasta indeksistä, poistaa päällekkäiset absoluuttiset tiedostopolut ja käyttää alkuperäistä skannausta vain poluille, jotka eivät kuulu minkään annetun hakemiston juureen.

loadIndexSet

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

Lataa indeksijoukon luettelotiedosto; oletuksena .greph-index-set.json nykyisessä työhakemistossa.

searchTextIndexedSet

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

Ratkaise valitut text-kohteet indeksijoukon luettelotiedostosta ja suorita toiminto, joka vastaa komentoa 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

Rakenna AST-tietofaktaindeksi tai päivitä se vaiheittain. Poimitut faktat tallennetaan oletusarvoisesti polkuun $rootPath/.greph-ast-index.

searchAstIndexed

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

Rajaa ehdokkaat faktaindeksin avulla ennen osumien uudelleentarkistusta lähdekoodia vasten. Palauttaa saman list<AstMatch>-rakenteen kuin searchAst.

searchAstIndexedMany

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

Suorita AST-faktahaku lämpimänä useista AST-indeksihakemistoista.

searchAstIndexedSet

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

Ratkaise valitut ast-index-kohteet indeksijoukon luettelotiedostosta ja suorita toiminto, joka vastaa komentoa 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

Rakenna välimuistiin tallennettu jäsennettyjen puiden tallennus tai päivitä sitä vaiheittain. Sarjoitetut puut tallennetaan oletusarvoisesti polkuun $rootPath/.greph-ast-cache.

searchAstCached

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

Suorita AST-haku välimuistiin tallennetuista jäsennetyistä puista ohittaen jäsentimen kokonaan. Palauttaa saman list<AstMatch>-rakenteen kuin searchAst.

searchAstCachedMany

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

Suorita välimuistiin tallennettu AST-haku lämpimänä useista välimuistihakemistoista.

searchAstCachedSet

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

Ratkaise valitut ast-cache-kohteet indeksijoukon luettelotiedostosta ja suorita toiminto, joka vastaa komentoa searchAstCachedMany.


Greph\Text\TextSearchOptions

Vain luku -asetukset tekstihakua varten.

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,
)

Validointi:

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

Käytä walkOptions():ta vastaavan WalkOptions:n johtamiseen, jos haluat käydä tiedostopuun erikseen läpi.

tracePlan-asetusta käyttävät lämpimät indeksoidut hakijat, ja greph-index CLI-virta tulostaa suunnittelijan diagnostiikkatiedot kohteeseen stderr. Alkuperäinen searchText ei itse käytä sitä.


Greph\Ast\AstSearchOptions

Vain luku -asetukset AST-hakua ja uudelleenkirjoitusta varten.

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,
)

AST-tilan oletustiedostotyyppisuodatin on php. Kun skipParseErrors on true (oletus), jäsennysvirheen aiheuttavat tiedostot ohitetaan hiljaisesti; aseta arvoksi false, jotta jäsennysvirheet nostetaan poikkeuksina. Lämpimät AST-hakijat käyttävät tracePlan-asetusta, ja greph-index ast-index|ast-cache search tulostaa ehdokkaiden karsinnan diagnostiikkatiedot.


Greph\Walker\WalkOptions

Vain luku -asetukset tiedostokulkijaa varten.

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

Ratkaise nimettyjen tiedostotyyppien aliakset tiedostopäätteluetteloiksi. Sisäänrakennetut aliakset:

Alias Tiedostopäätteet
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']);

Tulosoliot

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 ja AstCacheBuildResult noudattavat samaa muotoa, jossa factCount ja cachedTreeCount on korvattu vastaavasti.


Poikkeukset

Greph heittää kolme tyypitettyä poikkeusta, kaikki Greph\Exceptions-nimitilassa:

Poikkeus Milloin se heitetään
WalkerException Tiedostojärjestelmävirheet läpikäynnin aikana (puuttuva polku, lukukelvoton hakemisto)
PatternException Virheellinen säännöllinen lauseke tai AST-malli
ParseException PHP-lähdekoodia ei voitu jäsentää (vain kun skipParseErrors: false)

Indeksoidut hakumenetelmät aiheuttavat \RuntimeException-poikkeuksen, kun pyydetyssä sijainnissa ei ole indeksiä. greph-index CLI tarjoaa --fallback scan-asetuksen, joka ottaa nämä poikkeukset kiinni ja siirtyy sen sijaan indeksoimattomaan läpikäyntiin.