Taman bermain | Tutorial | dokumen
GritQL adalah bahasa kueri deklaratif untuk mencari dan memodifikasi kode sumber.
Baca dokumentasi, tutorial interaktif, atau jalankan grit --help
.
Instal Grit CLI:
curl -fsSL https://docs.grit.io/install | bash
Cari semua panggilan console.log
Anda dengan meletakkan pola yang diinginkan di backticks:
grit apply '`console.log($_)`'
Ganti console.log
dengan winston.log
, gunakan =>
untuk membuat penulisan ulang:
grit apply '`console.log($msg)` => `winston.log($msg)`'
Simpan pola ke file grit.yaml
dan kecualikan kasus uji dalam klausa Where:
cat << 'EOF' > .grit/grit.yaml
patterns:
- name: use_winston
level: error
body: |
`console.log($msg)` => `winston.log($msg)` where {
$msg <: not within or { `it($_, $_)`, `test($_, $_)`, `describe($_, $_)` }
}
EOF
grit apply use_winston
Jalankan grit check
untuk menerapkan pola Anda sebagai lint khusus.
grit check
console.log
, kecuali panggilan tersebut berada di dalam blok coba-tangkap `console.log($log)` => . where {
$log <: not within `try { $_ } catch { $_ }`
}
`$instance.oldMethod($args)` => `$instance.newMethod($args)` where {
$program <: contains `$instance = new TargetClass($_)`
}
Banyak contoh lainnya dapat ditemukan di perpustakaan standar GritQL.
Pola dapat digabungkan untuk membuat kueri yang kompleks, termasuk pemfaktoran ulang yang besar.
GritQL berasal dari pengalaman kami melakukan refactor dan migrasi skala besar.
Biasanya, migrasi dimulai dengan upaya eksplorasi untuk mengetahui cakupan masalahnya—seringkali menggunakan penelusuran grep sederhana. Ini mudah untuk dimulai, namun sebagian besar migrasi akhirnya mengumpulkan persyaratan tambahan seperti memastikan paket yang tepat diimpor dan mengecualikan kasus yang tidak memiliki jalur migrasi yang layak.
Pada akhirnya, setiap migrasi kompleks akan menjadi program codemod lengkap yang ditulis dengan alat seperti jscodeshift. Hal ini mempunyai permasalahan tersendiri:
GritQL adalah upaya kami untuk mengembangkan jalan tengah yang kuat:
$metavariables
untuk lubang yang ingin Anda wakili.GritQL menggunakan tree-sitter untuk semua parser bahasa dan mendapat banyak manfaat dari ekosistem Rust.
GritQL dirilis di bawah lisensi MIT.
Kontribusi dipersilahkan. Untuk memulai, lihat pedoman berkontribusi .
Anda juga dapat bergabung dengan kami di Discord .