PHP API
Greph\Greph
Greph\Greph klasė yra statinis įvesties taškas. Ji suteikia visas paieškos, perrašymo ir indeksavimo operacijas. Kiekvienas metodas priima vieną kelią arba kelių sąrašą.
use Greph\Greph;
walk
public static function walk(string|array $paths, ?WalkOptions $options = null): FileList
Paverčia $paths į plokščią absoliučių failų kelių FileList. Atsižvelgiama į gitignore, .grephignore, failų tipų filtrus, glob šablonus, paslėptų failų įtraukimą, simbolinių nuorodų sekimą, dvejetainių failų aptikimą ir didžiausio failo dydžio ribą.
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
Atlieka teksto paiešką ir pateikia list<TextFileResult>. Kiekviename TextFileResult yra failo kelias ir TextMatch objektų sąrašas (eilutė, stulpelis, turinys, užfiksuotos reikšmės, pasirinktinis kontekstas).
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";
}
}
Kai nustatyta jobs > 1 ir failų skaičius viršija darbininkų ribą, searchText automatiškai perduoda peržiūrą WorkerPool. Kitu atveju ji vykdoma tame pačiame procese.
searchAst
public static function searchAst(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
): array
Atlieka struktūrinę AST paiešką ir pateikia list<AstMatch>. Šablonai rašomi kaip PHP kodas su $VAR ir $$$VARIADIC metakintamaisiais. Kiekviename AstMatch yra failas, užfiksuotas PhpParser\Node, užfiksuotos reikšmės, pradžios ir pabaigos eilučių bei baitų poslinkiai ir atitinkantis pirminio kodo fragmentas.
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
Atlieka struktūrinį perrašymą ir pateikia list<RewriteResult>. Kiekviename RewriteResult yra failo kelias, pradinis turinys, perrašytas turinys ir pakeitimų skaičius. Perrašymai išsaugo formatą: pakeičiami tik atitinkančių mazgų fragmentai, o likusi failo dalis paliekama nepakeista.
$rewrites = Greph::rewriteAst(
'array($$$ITEMS)',
'[$$$ITEMS]',
'src',
);
foreach ($rewrites as $result) {
if ($result->changed()) {
file_put_contents($result->file, $result->rewrittenContents);
}
}
Fasadas į diską nerašo; skambinantysis nusprendžia, ar pritaikyti pakeitimus. CLI juos pritaiko, nebent nustatyta --dry-run arba --interactive.
Indeksuota teksto paieška
buildTextIndex
public static function buildTextIndex(
string $rootPath = '.',
?string $indexPath = null,
IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): IndexBuildResult
Sukuria naują trigramų ir identifikatorių įrašų indeksą, skirtą $rootPath. Indeksas saugomas $indexPath (numatytoji vieta – $rootPath/.greph-index). $lifecycle gali būti static, manual-refresh, opportunistic-refresh arba strict-stale-check. Pateikia IndexBuildResult, kuriame nurodytas failų ir trigramų skaičius, taip pat pridėtų, atnaujintų, pašalintų ir nepakeistų įrašų skaičius.
refreshTextIndex
public static function refreshTextIndex(
string $rootPath = '.',
?string $indexPath = null,
IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): IndexBuildResult
Palaipsniui atnaujina esamą teksto indeksą. Failų maišos reikšmės apskaičiuojamos iš naujo, o perrašomi tik pasikeitę įrašai.
searchTextIndexed
public static function searchTextIndexed(
string $pattern,
string|array $paths,
?TextSearchOptions $options = null,
?string $indexPath = null,
): array
Atlieka teksto paiešką pagal paruoštą indeksą. Jei indeksas neegzistuoja, pateikiama vykdymo klaida (pirmiausia iškvieskite buildTextIndex). Grąžinama list<TextFileResult>, kurios struktūra visiškai tokia pati kaip searchText.
Greph::buildTextIndex('.');
$results = Greph::searchTextIndexed('function', 'src');
searchTextIndexedMany
public static function searchTextIndexedMany(
string $pattern,
string|array $paths,
array $indexPaths,
?TextSearchOptions $options = null,
): array
Atlieka teksto paiešką pagal paruoštus indeksus keliuose kataloguose. Greph ieško kiekviename taikomame indekse, pašalina dublikatus pagal absoliutų failo kelią, o natūralią peržiūrą vykdo tik tų kelių, kurie nepatenka į nė vieno pateikto indekso šakninį katalogą, atžvilgiu.
loadIndexSet
public static function loadIndexSet(?string $manifestPath = null): IndexSet
Įkelia indeksų rinkinio aprašą; numatytoji vieta – .greph-index-set.json dabartiniame darbiniame kataloge.
searchTextIndexedSet
public static function searchTextIndexedSet(
string $pattern,
string|array $paths,
?TextSearchOptions $options = null,
?string $manifestPath = null,
array $entryNames = [],
): array
Iš indeksų rinkinio aprašo parenka text įrašus ir atlieka veiksmą, atitinkantį searchTextIndexedMany.
Indeksuota AST paieška
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
Sukuria arba palaipsniui atnaujina AST faktų indeksą. Išgauti faktai pagal numatytuosius nustatymus saugomi $rootPath/.greph-ast-index.
searchAstIndexed
public static function searchAstIndexed(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
?string $indexPath = null,
): array
Naudoja faktų indeksą galimų atitikmenų skaičiui sumažinti, o tada šaltinyje pakartotinai patikrina atitikmenis. Pateikia tokios pačios struktūros list<AstMatch> kaip searchAst.
searchAstIndexedMany
public static function searchAstIndexedMany(
string $pattern,
string|array $paths,
array $indexPaths,
?AstSearchOptions $options = null,
): array
Atlieka AST faktų paiešką pagal paruoštus indeksus keliuose AST indeksų kataloguose.
searchAstIndexedSet
public static function searchAstIndexedSet(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
?string $manifestPath = null,
array $entryNames = [],
): array
Iš indeksų rinkinio aprašo parenka ast-index įrašus ir atlieka veiksmą, atitinkantį 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
Sukuria arba palaipsniui atnaujina podėlyje saugomą išanalizuotų medžių saugyklą. Serijiniu būdu pateikti medžiai pagal numatytuosius nustatymus saugomi $rootPath/.greph-ast-cache.
searchAstCached
public static function searchAstCached(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
?string $indexPath = null,
): array
Atlieka AST paiešką podėlyje saugomuose išanalizuotuose medžiuose, visiškai praleisdama analizatorių. Pateikia tokios pačios struktūros list<AstMatch> kaip searchAst.
searchAstCachedMany
public static function searchAstCachedMany(
string $pattern,
string|array $paths,
array $indexPaths,
?AstSearchOptions $options = null,
): array
Atlieka AST paiešką pagal paruoštą podėlį keliuose podėlio kataloguose.
searchAstCachedSet
public static function searchAstCachedSet(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
?string $manifestPath = null,
array $entryNames = [],
): array
Iš indeksų rinkinio aprašo parenka ast-cache įrašus ir atlieka veiksmą, atitinkantį searchAstCachedMany.
Greph\Text\TextSearchOptions
Tik skaitymui skirtas teksto paieškos parinkčių objektas.
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,
)
Tikrinimas:
jobs >= 1beforeContext, afterContext >= 0maxCount === null || maxCount >= 1
Jei norite atskirai pereiti failų medį, naudokite walkOptions(), kad nustatytumėte atitinkamą WalkOptions.
tracePlan naudoja paruoštos indeksuotos paieškos priemonės, o greph-index CLI eiga pateikia planavimo diagnostiką į stderr. Natūrali searchText pati jos nenaudoja.
Greph\Ast\AstSearchOptions
Tik skaitymui skirtas AST paieškos ir perrašymo parinkčių objektas.
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,
)
Numatytasis AST režimo failų tipų filtras yra php. Kai skipParseErrors nustatyta į true (numatytoji reikšmė), nepavykusių išanalizuoti failų tyliai atsisakoma; nustatykite false, kad analizės klaidos būtų pateikiamos kaip išimtys. tracePlan naudoja paruoštos AST paieškos priemonės, o greph-index ast-index|ast-cache search – galimų atitikmenų mažinimo diagnostikai pateikti.
Greph\Walker\WalkOptions
Tik skaitymui skirtas failų peržiūros priemonės parinkčių objektas.
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
Paverčia pavadintus failų tipus plėtinių sąrašais. Įtaisytieji slapyvardžiai:
| Slapyvardis | Plėtiniai |
|---|---|
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']);
Rezultatų objektai
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 ir AstCacheBuildResult turi tokią pačią formą, atitinkamai pakeitus factCount ir cachedTreeCount.
Išimtys
Greph išmeta tris tipizuotas išimtis, visas iš Greph\Exceptions:
| Išimtis | Kada išmetama |
|---|---|
WalkerException |
Failų sistemos klaidos naršant (trūkstamas kelias, neįskaitomas katalogas) |
PatternException |
Netaisyklinga regex išraiška arba AST šablonas |
ParseException |
Nepavyko išanalizuoti PHP šaltinio (tik kai skipParseErrors: false) |
Indeksuotos paieškos metodai išmeta \RuntimeException, kai prašomoje vietoje nėra indekso. greph-index CLI pateikia parinktį --fallback scan, kuri šias klaidas perima ir vietoj to atlieka neindeksuotą paiešką.