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.
use Greph\Greph;
walk
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.
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
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).
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
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.
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
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.
$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.
Indeksoitu tekstihaku
buildTextIndex
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
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
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.
Greph::buildTextIndex('.');
$results = Greph::searchTextIndexed('function', 'src');
searchTextIndexedMany
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
public static function loadIndexSet(?string $manifestPath = null): IndexSet
Lataa indeksijoukon luettelotiedosto; oletuksena .greph-index-set.json nykyisessä työhakemistossa.
searchTextIndexedSet
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.
Indeksoitu AST-haku
buildAstIndex / refreshAstIndex
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
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
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
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
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
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
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
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.
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 >= 1beforeContext, afterContext >= 0maxCount === 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.
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.
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 |
new FileTypeFilter(includeTypes: ['php'], excludeTypes: ['md']);
Tulosoliot
Greph\Text\TextFileResult
final readonly class TextFileResult
{
public string $file;
/** @var list<TextMatch> */
public array $matches;
public function matchCount(): int;
public function hasMatches(): bool;
}
Greph\Text\TextMatch
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
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
final readonly class RewriteResult
{
public string $file;
public string $originalContents;
public string $rewrittenContents;
public int $replacementCount;
public function changed(): bool;
}
Greph\Index\IndexBuildResult
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.