2 poin oleh GN⁺ 2025-10-19 | 1 komentar | Bagikan ke WhatsApp
  • ripgrep 15.0 adalah rilis besar yang mencakup berbagai pembaruan seperti perbaikan bug, peningkatan performa, dan penambahan fitur baru
  • Banyak bug terkait penerapan aturan gitignore telah diperbaiki, dan optimasi memori dilakukan saat menangani file berukuran besar
  • Dukungan untuk platform Windows aarch64 ditambahkan, sementara dukungan powerpc64 dihentikan
  • Beberapa fitur baru mencakup dukungan simultan untuk --json dan flag pengganti, serta dukungan kurung kurawal bertingkat pada globs
  • Secara keseluruhan, peningkatan performa, perbaikan error, dan peningkatan kegunaan membantu meningkatkan produktivitas developer

Ikhtisar ripgrep 15.0

ripgrep 15.0 adalah rilis versi mayor terbaru dari ripgrep, yang terutama mencakup perbaikan bug, peningkatan performa minor, dan penambahan fitur baru kecil

ripgrep adalah alat untuk mencari pola regular expression secara rekursif di direktori saat ini berdasarkan baris
Secara default, alat ini mengikuti aturan gitignore dan secara otomatis melewati file/direktori tersembunyi serta file biner

Perubahan utama

  • Berbagai bug terkait pencocokan gitignore telah diperbaiki
    • Menyelesaikan bug yang sering dilaporkan terkait penerapan aturan gitignore pada direktori induk
  • Bug peningkatan penggunaan memori saat memproses file gitignore yang sangat besar telah diperbaiki
  • Pada rg -vf file, jika file kosong maka kini akan mencocokkan semuanya
  • Flag -r/--replace kini bekerja dengan benar bersama --json
  • Beberapa repositori Jujutsu (jj) juga dikenali seperti repositori git, sehingga ripgrep mengikuti gitignore milik jj
  • Globs kini mendukung kurung kurawal bertingkat

Dukungan platform

  • Biner rilis untuk Windows aarch64 kini tersedia
  • Biner rilis untuk powerpc64 tidak lagi disediakan
    • Dukungan dihentikan karena masalah pada workflow rilis CI, tetapi pengujian dan dukungan bisa diminta bila diperlukan
  • Biner ripgrep dikompilasi dengan LTO (link-time optimization penuh), memberikan sedikit peningkatan performa dan pengurangan ukuran

Peningkatan performa

  • Di Windows, performa meningkat saat opsi -z/--search-zip tidak digunakan karena pencarian helper binary dinonaktifkan
  • Di Windows, kecepatan meningkat dengan melewati normalisasi path saat menghasilkan hyperlink
  • Performa pemrosesan nilai besar saat menggunakan -A/--after-context ditingkatkan

Perbaikan bug

  • Banyak isu terkait gitignore telah diperbaiki, termasuk aturan gitignore direktori induk yang tidak diterapkan
  • Perintah rg -vf file kini diubah agar mencocokkan semuanya saat file target kosong
  • Ditambahkan penanganan untuk mengabaikan marker UTF-8 BOM di .gitignore dan sejenisnya
  • Penggunaan memori dioptimalkan saat memproses file gitignore besar
  • Diperbaiki kesalahan output jumlah byte yang dicari saat menggunakan --stats
  • Diperbaiki kesalahan pemrosesan glob yang berakhir dengan .
  • Diselesaikan masalah indikasi melebihi jumlah kecocokan saat menggunakan kombinasi -m/--max-count dan -U/--multiline
  • Saat menggunakan flag -r/--replace, kini line terminator dipertahankan
  • Diselesaikan kesalahan pembalikan exit code saat menggunakan kombinasi -q --files-without-match
  • Diselesaikan ketidaksesuaian dokumentasi antara -c/--count dan --files-with-matches
  • Diperbaiki masalah panic langka yang terjadi pada regular expression besar dan input besar
  • Diproses escape tanda hubung pada nama flag opsi di man page
  • Rilis macOS aarch64 kini menangani kompilasi statis PCRE2
  • Diperbaiki bug filter pengabaian direktori induk saat mencari file tersembunyi yang di-whitelist
  • Diperbaiki masalah statistik ringkasan yang salah saat menggunakan flag --json
  • Diperbaiki kesalahan pemrosesan gitignore saat mencari global gitignore dan path absolut
  • Diperbaiki masalah panic yang sebelumnya terjadi saat menggunakan kombinasi -U/--multiline dan -r/--replace

Peningkatan fitur

  • Kumpulan tipe file default telah diperluas dan ditingkatkan secara signifikan
  • -r/--replace ditingkatkan agar kompatibel dengan --json
  • Fitur pelengkapan untuk fish shell ditingkatkan agar mencerminkan file konfigurasi ripgrep
  • italic ditambahkan sebagai atribut gaya yang dapat digunakan pada --color
  • Direktori .jj diperlakukan sebagai repositori git
  • Saat menggunakan multithreading, ditambahkan kemampuan untuk menjadwalkan pencarian sesuai urutan file yang ditentukan di CLI
  • Artefak rilis aarch64 untuk Windows ditambahkan
  • Ditambahkan tipe warna highlight, yang memungkinkan styling teks yang tidak cocok pada baris yang cocok
  • Fitur alternates bertingkat ditambahkan ke globs dan crate globset
  • Autocomplete --hyperlink-format ditingkatkan di bash, fish, dan zsh

1 komentar

 
GN⁺ 2025-10-19
Komentar Hacker News
  • ripgrep benar-benar alat yang menghemat banyak waktu saya selama bertahun-tahun; ini alat wajib yang selalu saya pasang pertama kali setiap memulai sistem baru, dan terutama tak tergantikan saat menjelajahi codebase lama. Satu hal yang sedikit disayangkan adalah saat memakai opsi -F (perlakukan sebagai literal), beberapa karakter tampaknya masih diperlakukan sebagai karakter spesial yang perlu di-escape. Saya tidak ingat persis karakter apa. Meski begitu, saya selalu senang setiap kali melihat ripgrep terus diperbarui.

    • Kalau Anda bisa memberi contoh karakter mana yang bermasalah, saya bisa menjelaskan lebih spesifik. -F/--fixed-strings mematikan 100% fitur regular expression pada pola dan memperlakukannya murni sebagai literal. Jika perlu escape, kemungkinan penyebabnya adalah shell yang memintanya.
  • rg terasa seperti alat ajaib. Padahal sebenarnya itu hasil dari engineering yang luar biasa, perbaikan yang konsisten, dan pemanfaatan maksimal performa hardware menakjubkan yang kita semua pakai setiap hari. Ini juga sebuah inovasi yang membuka kemungkinan agar developer bisa menjelajahi dan memahami kode lebih cepat tanpa perlu membuat standar terpisah seperti lsp.

    • Saya benar-benar penasaran apa arti smithing dalam konteks ini.
  • Codebase ripgrep adalah contoh terbaik dari "siapkan minuman dan duduk di kursi paling nyaman untuk menikmati software berkualitas tinggi". Saya jadi mengklik ke sana-sini di seluruh sudut kode sambil berdecak kagum.

  • Seperti fd, rg adalah command-line tool yang benar-benar menyenangkan untuk dipakai. Saya suka alat-alat baru berbasis perintah seperti ini.

    • Saya baru tahu belakangan ini bahwa penulis ripgrep dan fd bekerja di Astral. Jadi rasanya masuk akal kenapa software Astral sebagus ini.
    • Kedua alat itu, bahkan tanpa opsi khusus, secara default sudah bekerja sesuai dengan 99% yang saya inginkan. Penghemat waktu yang luar biasa. Misalnya cukup mengetik rg <string> atau fd <string> saja.
  • Fitur yang secara pribadi ingin saya tambahkan adalah flag "ekstensi". Fungsinya seperti -g, tetapi memperlakukan argumen input sebagai ekstensi (contoh: seperti rg -e c,h). Dalam banyak kasus saat memakai pola glob, tujuan saya sebenarnya memang mencocokkan ekstensi.

    • Saya ingin bertanya apakah Anda pernah melihat flag -t/--type. Itu bisa dipakai seperti -tc sesuai contoh. Jika ekstensinya belum ada di ripgrep, Anda juga bisa mendefinisikan type sendiri.
  • ripgrep adalah alasan utama saya mulai tertarik pada Rust. Cara kerjanya begitu matang sehingga fakta bahwa ia ditulis dengan Rust membuat saya ingin tahu lebih jauh. Bertahun-tahun kemudian, saya masih memakai rg setiap hari.

    • nibbles adalah alasan utama saya jadi tertarik pada qbasic. Karena begitu matang, saya tertarik bahwa itu ditulis dengan qbasic, dan berkat itu saya pun memakai nibbles setiap hari.
  • Baru-baru ini saya menemukan opsi --replace dan cukup terkesan. Saya memakainya bersama --type, dan agak menyesal karena sebelumnya tidak tahu ada fitur-fitur sekeren ini. Ke depan saya ingin membaca catatan rilis dengan lebih teliti agar lebih cepat menyadari fitur baru. Peningkatan integrasi dengan jj juga menyenangkan untuk dilihat.

  • Alat yang hebat dan juga sangat mudah digunakan. Awalnya saya mulai memakainya di Linux, sekarang saya juga memakainya di Windows. Berkat alat ini, sekarang saya langsung memakai regular expression untuk pencarian alih-alih wildcard.

    • Lebih baik daripada grep bawaan, dan perintah rg --files juga berguna.
  • Minggu ini saya membuat fungsi bash untuk menjalankan ripgrep hanya pada file yang dilacak git.

      rgg() {
        readarray -d '' -t FILES < <(git ls-files -z)
        rg "${@}" "${FILES[@]}"
      }
    

    Ini bisa mencari jauh lebih cepat di direktori yang berisi banyak file biner atau dot file. Untuk mencari dot file dibutuhkan opsi -uu, tetapi opsi ini juga akan ikut mencari file biner. Saat jumlah file mencapai ratusan, git ls-files sendiri jadi lambat.

    • Saya penasaran apakah ada contoh konkret di mana cara itu memang lebih cepat. Secara umum ripgrep sudah menghormati aturan gitignore, jadi perilakunya mirip dengan git ls-files. Sebagai catatan, opsi -uu berarti ripgrep harus mengabaikan gitignore dan hidden file, tetapi tetap melewati file biner. Untuk menyertakan file biner juga, Anda butuh -uuu. Masalah terbesar fungsi itu adalah ketika dipakai pada repo kernel Linux, akan muncul error argument list too long. Jadi saya ubah ke xargs.
        $ git ls-files -z | time xargs -0 rg APM_RESUME
        ...
      
        real  0.638
        user  0.741
        sys   1.441
        maxmem 29 MB
        faults 0
        $ time rg APM_RESUME
        ...
      
        real  0.097
        user  0.399
        sys   0.588
        maxmem 29 MB
        faults 0
      
      Kalau ada contoh situasi di mana git ls-files -z | xargs -0 rg ... lebih cepat daripada langsung rg ..., mohon dibagikan.
    • Setelah menulis komentar ini dan membaca manual lagi, saya sadar bahwa alih-alih -uu, saya bisa memakai flag -. (khusus untuk mencari hidden file). Akan bagus kalau bisa mencari hidden file yang dilacak git, tetapi overhead saat melakukan query daftar file ternyata cukup besar, sampai-sampai sulit diabaikan bahkan jika ditulis dengan Rust.
    • Mungkin saya melewatkan sesuatu, tetapi bukankah secara default ripgrep memang mengabaikan file yang tidak dilacak git?
    • Saya penasaran apakah cara ini lebih cepat daripada git grep.
  • Saya memakai ripgrep setiap hari untuk kerja, baik di command line maupun saat mencari di vscode. Terima kasih untuk burntsushi.