Ugrás a tartalomhoz

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.

PHP
use Greph\Greph;

walk

PHP
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.

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

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

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

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

PHP
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.

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

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.

PHP
$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.


buildTextIndex

PHP
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

PHP
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

PHP
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.

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

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

PHP
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

PHP
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.


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

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

PHP
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

PHP
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

PHP
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

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

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

PHP
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

PHP
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

PHP
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.

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

Érvényesítés:

  • jobs >= 1
  • beforeContext, afterContext >= 0
  • maxCount === 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.

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

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.

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

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
PHP
new FileTypeFilter(includeTypes: ['php'], excludeTypes: ['md']);

Eredményobjektumok

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 é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.