PHP API
Greph\Greph
A Greph\Greph osztály a statikus belépési pont. Minden keresési, átírási és indexelési műveletet elérhetővé tesz. Minden metódus egyetlen útvonalat vagy útvonalak listáját fogadja.
use Greph\Greph;
walk
public static function walk(string|array $paths, ?WalkOptions $options = null): FileList
A $paths feloldása abszolút fájlútvonalak lapos FileList formátumára. Figyelembe veszi a gitignore-t, a .grephignore értékét, a fájltípus-szűrőket, a globmintákat, a rejtett fájlok bevonását, a szimbolikus hivatkozások követését, a bináris fájlok felismerését és a maximális fájlméret korlátját.
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
Szöveges keresést futtat, és list<TextFileResult> értéket ad vissza. Minden TextFileResult tartalmazza a fájl útvonalát és a TextMatch objektumok listáját (sor, oszlop, tartalom, rögzített értékek, opcionális környezet).
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";
}
}
Ha a jobs > 1 értéke igaz, és a fájlok száma meghaladja a munkafolyamat-küszöböt, a searchText automatikusan egy WorkerPool számára osztja ki a vizsgálatot. Egyébként a folyamaton belül fut.
searchAst
public static function searchAst(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
): array
Strukturális AST-keresést futtat, és list<AstMatch> értéket ad vissza. A mintákat PHP forrásként kell megadni, $VAR és $$$VARIADIC metavaltozókkal. Minden AstMatch tartalmazza a fájlt, a rögzített PhpParser\Node elemet, a rögzített értékeket, a kezdő és záró sort, a bájteltolásokat, valamint az illeszkedő forrásrészletet.
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
Strukturális átírást futtat, és list<RewriteResult> értéket ad vissza. Minden RewriteResult tartalmazza a fájl útvonalát, az eredeti tartalmat, az átírt tartalmat és a cserék számát. Az átírás megőrzi a formázást: csak az illeszkedő csomópontok tartományait cseréli ki, a fájl többi része változatlan marad.
$rewrites = Greph::rewriteAst(
'array($$$ITEMS)',
'[$$$ITEMS]',
'src',
);
foreach ($rewrites as $result) {
if ($result->changed()) {
file_put_contents($result->file, $result->rewrittenContents);
}
}
A homlokzat nem ír lemezre; a hívó dönti el, alkalmazza-e a módosításokat. A CLI alkalmazza őket, kivéve, ha a --dry-run vagy a --interactive be van állítva.
Indexelt szöveges keresés
buildTextIndex
public static function buildTextIndex(
string $rootPath = '.',
?string $indexPath = null,
IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): IndexBuildResult
Új trigram- és azonosító-előfordulási indexet épít a $rootPath számára. Az index a $indexPath helyre kerül (alapértelmezés szerint $rootPath/.greph-index). A $lifecycle értéke lehet static, manual-refresh, opportunistic-refresh vagy strict-stale-check. IndexBuildResult értéket ad vissza, amely tartalmazza a fájlok és trigramok számát, valamint a hozzáadott, frissített, törölt és változatlan elemek számát.
refreshTextIndex
public static function refreshTextIndex(
string $rootPath = '.',
?string $indexPath = null,
IndexLifecycle|IndexLifecycleProfile|string|null $lifecycle = null,
): IndexBuildResult
Meglévő szöveges index fokozatos frissítése. A fájlokat újra hasheli, és csak a módosult bejegyzéseket írja át.
searchTextIndexed
public static function searchTextIndexed(
string $pattern,
string|array $paths,
?TextSearchOptions $options = null,
?string $indexPath = null,
): array
Szöveges keresés futtatása a bemelegített indexen. Futásidejű hibával tér vissza, ha az index nem létezik (előbb hívja meg a buildTextIndex függvényt). A searchText formátumával pontosan megegyező list<TextFileResult> értéket ad vissza.
Greph::buildTextIndex('.');
$results = Greph::searchTextIndexed('function', 'src');
searchTextIndexedMany
public static function searchTextIndexedMany(
string $pattern,
string|array $paths,
array $indexPaths,
?TextSearchOptions $options = null,
): array
Bemelegített szöveges keresés futtatása több szöveges indexkönyvtárban. A Greph minden megfelelő indexben keres, abszolút fájlútvonal alapján kiszűri a duplikátumokat, és csak azokra az útvonalakra tér vissza a natív vizsgálathoz, amelyek kívül esnek az összes megadott index gyökérkönyvtárán.
loadIndexSet
public static function loadIndexSet(?string $manifestPath = null): IndexSet
Indexkészlet-manifeszt betöltése; alapértelmezés szerint az aktuális munkakönyvtárban található .greph-index-set.json fájlból.
searchTextIndexedSet
public static function searchTextIndexedSet(
string $pattern,
string|array $paths,
?TextSearchOptions $options = null,
?string $manifestPath = null,
array $entryNames = [],
): array
A kiválasztott text bejegyzések feloldása az indexkészlet-manifesztből, majd a searchTextIndexedMany művelettel egyenértékű futtatás.
Indexelt AST-keresés
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
AST-tényindex építése vagy fokozatos frissítése. Alapértelmezés szerint a kinyert tényeket a $rootPath/.greph-ast-index helyre menti.
searchAstIndexed
public static function searchAstIndexed(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
?string $indexPath = null,
): array
A tényindex segítségével leszűkíti a jelölteket, majd a forrás alapján újra ellenőrzi az egyezéseket. A searchAst értékével azonos formátumú list<AstMatch> értéket ad vissza.
searchAstIndexedMany
public static function searchAstIndexedMany(
string $pattern,
string|array $paths,
array $indexPaths,
?AstSearchOptions $options = null,
): array
Bemelegített AST-ténykeresés futtatása több AST-indexkönyvtárban.
searchAstIndexedSet
public static function searchAstIndexedSet(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
?string $manifestPath = null,
array $entryNames = [],
): array
A kiválasztott ast-index bejegyzések feloldása az indexkészlet-manifesztből, majd a searchAstIndexedMany művelettel egyenértékű futtatás.
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
A gyorsítótárazott, elemzett fákat tároló tár építése vagy fokozatos frissítése. Alapértelmezés szerint a sorosított fákat a $rootPath/.greph-ast-cache helyre menti.
searchAstCached
public static function searchAstCached(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
?string $indexPath = null,
): array
AST-keresés futtatása a gyorsítótárazott elemzett fákon, az elemző teljes kihagyásával. A searchAst értékével azonos formátumú list<AstMatch> értéket ad vissza.
searchAstCachedMany
public static function searchAstCachedMany(
string $pattern,
string|array $paths,
array $indexPaths,
?AstSearchOptions $options = null,
): array
Bemelegített, gyorsítótárazott AST-keresés futtatása több gyorsítótár-könyvtárban.
searchAstCachedSet
public static function searchAstCachedSet(
string $pattern,
string|array $paths,
?AstSearchOptions $options = null,
?string $manifestPath = null,
array $entryNames = [],
): array
A kiválasztott ast-cache bejegyzések feloldása az indexkészlet-manifesztből, majd a searchAstCachedMany művelettel egyenértékű futtatás.
Greph\Text\TextSearchOptions
Csak olvasható beállításokat tartalmazó objektum szöveges kereséshez.
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,
)
Érvényesítés:
jobs >= 1beforeContext, afterContext >= 0maxCount === null || maxCount >= 1
Ha külön szeretné bejárni a fájlfát, a megfelelő WalkOptions levezetéséhez használja a walkOptions() értékét.
A tracePlan értékét a bemelegített indexelt keresők használják, a greph-index CLI folyamat pedig a tervező diagnosztikai üzeneteit a stderr helyre írja. Maga a natív searchText nem használja.
Greph\Ast\AstSearchOptions
Csak olvasható beállításokat tartalmazó objektum AST-kereséshez és átíráshoz.
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,
)
Az AST-mód alapértelmezett fájltípus-szűrője: php. Ha a skipParseErrors értéke true (ez az alapértelmezés), az elemzési hibát okozó fájlokat a rendszer csendben kihagyja; állítsa false értékre, ha kivételként szeretné megkapni az elemzési hibákat. A tracePlan értékét a bemelegített AST-keresők, a greph-index ast-index|ast-cache search értékét pedig a jelöltcsökkentési diagnosztika kiírása használja.
Greph\Walker\WalkOptions
Csak olvasható beállításokat tartalmazó objektum a fájlbejáróhoz.
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
Névvel ellátott fájltípusok feloldása kiterjesztéslistákra. Beépített aliasok:
| Alias | Kiterjesztések |
|---|---|
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']);
Eredményobjektumok
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 és AstCacheBuildResult ugyanezt a formát követi, rendre factCount és cachedTreeCount behelyettesítésével.
Kivételek
A Greph három típusos kivételt dob, mindegyiket a Greph\Exceptions tartalmazza:
| Kivétel | Mikor dobódik |
|---|---|
WalkerException |
Fájlrendszerhibák bejárás közben (hiányzó útvonal, nem olvasható könyvtár) |
PatternException |
Érvénytelen reguláris kifejezés vagy AST-minta |
ParseException |
A PHP forrása nem volt feldolgozható (csak akkor, ha skipParseErrors: false) |
Az indexelt keresési metódusok \RuntimeException kivételt dobnak, ha a kért helyen nincs index. A greph-index CLI egy --fallback scan beállítást biztosít, amely elkapja ezeket, és helyette index nélküli keresést végez.