Lewati ke konten

Greph

Mesin pencarian kode PHP murni, pencarian struktural, dan penulisan ulang. Alur kerja grep, ripgrep, dan ast-grep dalam satu paket Composer.

Terminal
composer require greph/greph

Rilis terbaru v0.2.3 MIT PHP 8.2+

Dalam praktik

Pasang paket dengan Composer, lalu cari dan tulis ulang dari baris perintah atau dari PHP.

Cari, cocokkan, dan pratinjau penulisan ulang

-F menjalankan pencarian teks string tetap, -p menerima pola berbentuk PHP dengan variabel meta seperti $CLASS, dan -r menambahkan templat pengganti. --dry-run mencetak file yang telah ditulis ulang tanpa menyimpannya.

Facade Greph statis menyediakan operasi yang sama untuk kode PHP. Jika dipasang sebagai dependensi, perintah vendor/bin memerlukan versi 0.2.3 atau lebih baru.

Terminal
# Text search
vendor/bin/greph -F "function" src

# Structural search
vendor/bin/greph -p 'new $CLASS()' src

# Structural rewrite preview
vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src

PHP Murni

Pencarian dan penulisan ulang berjalan di PHP 8.2+, tanpa biner grep, ripgrep, atau ast-grep. Menggunakan ekstensi json, ctype, dan tokenizer, serta zlib untuk penyimpanan AST cache.

Pencarian Teks

Pencarian string tetap dan regex dengan mode kata utuh, tidak peka huruf besar-kecil, konteks, jumlah, dan khusus file. Keluaran kompatibel dengan grep.

Pencarian AST

Pencarian struktural pada kode sumber PHP dengan variabel meta $VAR dan $$$VARIADIC, capture berulang, dan keluaran JSON. PHP adalah satu-satunya bahasa yang didukung.

Penulisan Ulang AST

Penulisan ulang struktural dengan mode dry-run, interaktif, dan tulis. Hanya kode yang cocok yang berubah; komentar dan tata letak di luar kecocokan tetap seperti semula.

Mode Terindeks

Bangun indeks teks trigram, indeks fakta AST, atau penyimpanan AST cache sekali, lalu gunakan kembali. Dalam benchmark proyek, indeks fakta AST membutuhkan 1.4 s untuk dibuat dan memangkas new $CLASS() dari 2.9 s menjadi 11 ms; indeks trigram membutuhkan 12.3 s.

Wrapper rg & sg

vendor/bin/rg dan vendor/bin/sg menerima flag pencarian umum ripgrep dan ast-grep pada mesin yang sama. Tidak tercakup: multiline, --replace, --type-add, dan --sort di rg; aturan YAML dan bahasa non-PHP di sg.

PHP API

Greph::searchText(), searchAst(), dan rewriteAst() mengembalikan objek hasil bertipe, sehingga kode PHP dan agen dapat memanggil mesin tanpa subprocess.

Korpus Oracle

39 skenario membandingkan output teks greph, AST, dan penulisan ulang dengan grep, ripgrep, dan ast-grep. Jalankan dengan composer test:oracle dalam klon repositori; CI menjalankan rangkaian unit dan integrasi.

Mengapa Greph

Tanpa Biner Native

Pencarian dan penulisan ulang berjalan di dalam proses PHP. Biner rg, grep, dan sg hanya digunakan untuk perbandingan benchmark opsional.

Satu Mesin untuk Setiap Mode

Pencarian teks, pencarian dan penulisan ulang struktural PHP berada dalam satu paket Composer. Wrapper rg dan sg memanggil mesin yang sama dengan vendor/bin/greph.

Penulisan ulang hanya mengubah bagian yang cocok

Penulis ulang menyisipkan templat yang dirender ke dalam rentang byte yang cocok. Kode di luar kecocokan mempertahankan indentasi, komentar, dan baris kosongnya.

Indeks Hangat Tanpa Daemon

Indeks disimpan di disk dan digunakan kembali pada proses berikutnya. Profil siklus hidup menentukan apakah indeks usang dibiarkan, diperbarui saat pencarian, atau ditolak.

Dibandingkan dengan

Greph menyatukan pencarian dan penulisan ulang dalam PHP. Alat-alat ini menyelesaikan masalah terkait dan melakukan beberapa hal yang tidak dilakukan Greph.

Greph dibandingkan dengan alat lainnya
ripgrep KeunggulanAlat pencarian regex rekursif dengan dukungan kelas satu di Windows, macOS, dan Linux serta unduhan biner untuk setiap rilis. Alat ini mematuhi aturan gitignore dan secara default melewati file tersembunyi serta biner. Perbedaan dengan GrephGreph dipasang dengan Composer dan berjalan di PHP. Dalam benchmark CI pada korpus WordPress, rg lebih cepat pada setiap kueri teks tanpa cache; misalnya, 81.62 ms dibanding 458.82 ms untuk pencarian literal. Indeks Greph yang hangat menjawab kueri jumlah dalam 10.90 ms dibanding 49.61 ms untuk rg.
ast-grep KeunggulanCLI terkompilasi untuk pencarian struktural, lint, dan penulisan ulang, dibangun di atas tree-sitter. Mendukung banyak bahasa secara bawaan, termasuk PHP, serta file aturan YAML untuk aturan lint dan perubahan kode. Perbedaan dengan GrephGreph hanya menangani PHP dan tidak membaca aturan YAML. Pada pemindaian tanpa cache, sg lebih cepat untuk array($$$ITEMS) dalam benchmark CI milik Greph. Indeks AST hangat milik Greph menjawab new $CLASS() dalam 10.89 ms dibanding 4093.61 ms untuk sg.
Rector KeunggulanMemutakhirkan dan merefaktor kode PHP melalui aturan dan kumpulan aturan, mencakup versi PHP dari 5.3 hingga 8.5 serta proyek seperti Symfony, PHPUnit, dan Doctrine. Perbedaan dengan GrephGreph menulis ulang berdasarkan pola dan templat yang Anda buat. Dokumentasinya menyarankan untuk tidak menggunakannya ketika perubahan bergantung pada informasi tipe yang tidak dapat diselesaikan PHP-Parser dari satu file, atau memerlukan penambahan atau penghapusan import lintas file.
PHP CS Fixer KeunggulanMemperbaiki kode agar mengikuti standar pengodean, dengan kumpulan aturan bawaan seperti Gaya Pengodean PER dari PHP-FIG. Perbedaan dengan GrephGreph tidak memformat ulang file. Alat ini hanya mengubah kode yang cocok dengan pola, dan dokumentasinya mengarahkan Anda ke PHP CS Fixer jika menginginkan pemformat.

Tanya jawab

Jawaban singkat dari dokumentasi Greph.

Baca dokumentasi Greph untuk referensi CLI, PHP API, mode terindeks, serta wrapper rg dan sg.