ripgrep 15.0
(github.com/BurntSushi)- ripgrep 15.0, hata düzeltmeleri, performans iyileştirmeleri ve yeni özellikler gibi çeşitli güncellemeler içeren büyük bir sürümdür
- gitignore kurallarının uygulanması ile ilgili çok sayıda hata düzeltildi ve büyük dosyalar işlenirken bellek optimizasyonu yapıldı
- Windows aarch64 platformu desteği eklendi ve powerpc64 desteği sonlandırıldı
- Yeni özellikler arasında --json ile replace bayrağının eşzamanlı desteği, glob'larda iç içe süslü parantez desteği yer alıyor
- Genel performans iyileştirmeleri, hata düzeltmeleri ve kullanılabilirlik artışlarıyla geliştirici üretkenliği yükseliyor
ripgrep 15.0 genel bakış
ripgrep 15.0, ripgrep'in en yeni büyük sürümüdür ve başlıca hata düzeltmeleri, küçük performans artışları ve sınırlı sayıda yeni özellik içerir
ripgrep, geçerli dizinde düzenli ifade kalıplarını satır bazında özyinelemeli olarak arayan bir araçtır
Varsayılan olarak gitignore kurallarını izler ve gizli dosya/dizinleri ile ikili dosyaları otomatik olarak atlar
Başlıca değişiklikler
- Birden fazla gitignore eşleştirme hatası düzeltildi
- Üst dizinlerdeki gitignore kurallarının uygulanmasıyla ilgili sık bildirilen bir hata giderildi
- Çok büyük gitignore dosyaları işlenirken ortaya çıkan artan bellek kullanımı hatası çözüldü
rg -vf filekomutunda file boş olduğunda artık her şey eşleşiyor-r/--replacebayrağı artık--jsonile birlikte düzgün çalışıyor- Bazı Jujutsu (jj) depoları da git deposu gibi algılanıyor; böylece ripgrep, jj'nin gitignore kurallarını izliyor
- Glob'lar iç içe süslü parantezleri destekliyor
Platform desteği
- Windows için aarch64 sürüm ikilileri artık sağlanıyor
- powerpc64 için sürüm ikilileri artık sağlanmıyor
- CI sürüm iş akışı sorunları nedeniyle durduruldu; test ve desteğin geri gelmesi istenirse talep edilebilir
- ripgrep ikilileri LTO (tam bağlama zamanı optimizasyonu) ile derleniyor; bu da küçük performans artışı ve boyut küçülmesi sağlıyor
Performans iyileştirmeleri
- Windows üzerinde
-z/--search-zipseçeneği kullanılmadığında yardımcı ikili aramasının devre dışı bırakılması ile performans artırıldı - Windows'ta hiperlink çıktısında yol normalizasyonunun atlanması sayesinde hız artışı sağlandı
-A/--after-contextkullanılırken büyük değerlerin işlenmesinde performans iyileştirildi
Hata düzeltmeleri
- Üst dizin gitignore kurallarının uygulanmaması dahil olmak üzere çok sayıda gitignore sorunu düzeltildi
- Boş dosya hedefleyen
rg -vf filekomutu artık her şeyle eşleşecek şekilde düzeltildi .gitignoregibi dosyalarda UTF-8 BOM işaretinin yok sayılması eklendi- Büyük gitignore dosyaları işlenirken bellek kullanımı optimize edildi
--statskullanıldığında aranan bayt sayısının yanlış gösterilmesi düzeltildi.ile biten glob'ların işlenmesindeki hata giderildi-m/--max-countile-U/--multilinebirlikte kullanıldığında eşleşme sınırı aşımı gösterimi sorunu çözüldü-r/--replacebayrağı kullanıldığında satır sonlandırıcılarının korunması sağlandı-q --files-without-matchbirleşiminde çıkış kodunun ters dönmesi hatası düzeltildi-c/--countile--files-with-matchesarasındaki belge uyumsuzluğu giderildi- Büyük düzenli ifadeler ve girdilerle nadiren görülen panic sorunu düzeltildi
- Man sayfasındaki seçenek bayrağı adlarında tire kaçışlama düzeltildi
- macOS aarch64 sürümünde PCRE2 statik derleme işlemi düzenlendi
- Beyaz listeye alınmış gizli dosya aramalarında üst dizin yoksayma filtresi hatası düzeltildi
--jsonbayrağı kullanılırken hatalı özet istatistikleri sorunu giderildi- Mutlak yollar ve genel gitignore aramalarında gitignore işleme hatası düzeltildi
-U/--multilineile-r/--replacebirlikte kullanıldığında oluşan panic sorunu düzeltildi
Özellik iyileştirmeleri
- Varsayılan dosya türü kümesi büyük ölçüde genişletildi ve iyileştirildi
-r/--replace,--jsonile uyumlu olacak şekilde geliştirildi- fish shell tamamlama özelliği artık ripgrep yapılandırma dosyasını yansıtıyor
--coloriçin kullanılabilen stil niteliklerine italic eklendi.jjdizini git deposu gibi ele alınıyor- Çok iş parçacıklı kullanımda, CLI'de belirtilen dosya sırasına göre aramayı zamanlama özelliği eklendi
- Windows için
aarch64sürüm artifaktları eklendi - highlight renk türü eklendi; böylece eşleşen satırlardaki eşleşmeyen metin stillendirilebiliyor
- globs ve globset crate'ine iç içe alternates özelliği eklendi
--hyperlink-formatotomatik tamamlama özelliği bash, fish ve zsh için iyileştirildi
1 yorum
Hacker News görüşü
ripgrep son yıllarda bana gerçekten çok zaman kazandıran bir araç oldu; her yeni sisteme başlarken ilk kurduğum vazgeçilmez araçlardan biri, özellikle eski kod tabanlarını gezerken onsuz olmuyor. Tek küçük hayal kırıklığım,
-F(literal olarak ele al) seçeneğini kullanırken bile bazı karakterlerin hâlâ kaçış gerektiren özel karakter gibi davranmasıydı; tam olarak hangileri olduğunu hatırlamıyorum. Yine de ripgrep’in güncellenmeye devam ettiğini görmek her zaman sevindirici.-F/--fixed-strings, desendeki düzenli ifade özelliklerini %100 kapatır ve her şeyi yalnızca literal olarak işler. Kaçış gerekiyorsa, sebep büyük ihtimalle shell’in bunu istemesidir.rgadeta büyü gibi hissettiren bir araç. Gerçekte ise olağanüstü mühendisliğin, sürekli iyileştirmenin ve hepimizin her gün kullandığı muazzam donanım gücünden sonuna kadar yararlanmanın sonucu. Ayrıcalspgibi ayrı standartlar oluşturmaya gerek kalmadan geliştiricilerin kodu daha hızlı gezip anlamasını mümkün kılan bir yenilik.smithingkelimesinin bu bağlamda tam olarak ne anlama geldiğini gerçekten merak ediyorum.ripgrep kod tabanı, “içeceğini hazırlayıp en rahat koltuğa oturarak yüksek kaliteli yazılım okumak” hissinin en iyi örneklerinden biri. Kodun içinde oradan oraya tıklayıp hayran kalıyorsunuz.
fdgibirgde kullanması gerçekten keyif veren bir komut satırı aracı. Bu tür yeni nesil komut tabanlı araçları seviyorum.fdyazarlarının Astral’da çalıştığını öğrendim. Astral yazılımlarının neden bu kadar iyi olduğunu şimdi daha iyi anlıyorum.rg <string>veyafd <string>yazmak çoğu zaman yeterli.Benim şahsen eklenmesini istediğim özellik bir “uzantı” bayrağı.
-ggibi çalışır ama verilen argümanı uzantı olarak yorumlar (örneğinrg -e c,hgibi). Çünkü glob desenlerini kullandığım çoğu durumda amaç uzantı eşleştirmesi oluyor.-t/--typebayrağını görüp görmediğinizi sormak istiyorum; örneğinizdeki gibi-tckullanılabiliyor. ripgrep’te hazır olmayan bir uzantıysa, kendi type tanımınızı da yapabilirsiniz.ripgrep, Rust’a ilgi duymaya başlamamın başlıca sebeplerinden biriydi. O kadar düzgün çalışıyordu ki Rust ile yazılmış olduğunu öğrenince daha da meraklandım. Aradan yıllar geçti, hâlâ her gün
rgkullanıyorum.nibbles, benim QBasic’e ilgi duymamın başlıca sebebiydi. O kadar iyi yapılmıştı ki QBasic ile yazılmış olması ilgimi çekmişti; bu sayedenibbles’ı da her gün kullanır oldum.Yakın zamanda
--replaceseçeneğini keşfettim ve oldukça etkilendim.--typeile birlikte kullanırken, daha önce böyle güzel özelliklerin varlığından habersiz olmama hayıflandım. Bundan sonra sürüm notlarını daha dikkatli okuyup yeni özellikleri daha yakından takip etmeyi düşünüyorum.jjile entegrasyonun gelişmesi de sevindirici.Harika bir araç olmasının yanında kullanımı da çok kolay. İlk başta Linux’ta kullanmaya başladım, şimdi Windows’ta da kullanıyorum. Bu araç sayesinde artık wildcard yerine doğrudan düzenli ifadeleri aramada kullanıyorum.
grep’ten daha iyi verg --fileskomutu da kullanışlı.Bu hafta, ripgrep’i yalnızca git’in izlediği dosyalarda çalıştıran bir bash fonksiyonu yazdım.
Çok sayıda binary dosya veya dot dosyası bulunan dizinlerde çok daha hızlı arama yapılabiliyor. Dot dosyalarını aramak için
-uugerekiyor ama bu seçenek binary dosyaları da aramaya katıyor. Dosya sayısı yüzleri buluncagit ls-filesda kendi başına yavaşlamaya başlıyor.gitignorekurallarına saygı duyduğu içingit ls-filesile benzer davranır. Bu arada-uu, ripgrep’egitignoreve hidden dosyaları yok saymasını söyler, ama binary dosyaları yine de atlar. Binary dosyaları da dahil etmek için-uuugerekir. Fonksiyondaki en büyük sorun ise Linux çekirdeği deposunda çalıştırınca “argument list too long” hatası vermesi; bu yüzdenxargsile denedim. Böyle bir durumdagit ls-files -z | xargs -0 rg ...komutunun düzrg ...komutundan daha hızlı olduğu bir örneğiniz varsa paylaşmanızı isterim.-uuyerine-.bayrağını kullanabileceğimi fark ettim; bu yalnızca hidden dosyaları arıyor. Git’in izlediği hidden dosyaları arayabilmek güzel olurdu ama dosya listesini sorgulamanın getirdiği ek yük, Rust ile yazılmış olsa bile göz ardı edilecek gibi değil.git grep’ten daha hızlı olup olmadığını merak ediyorum.İşte her gün ripgrep kullanıyorum; hem komut satırında hem de VSCode’da arama yaparken sürekli elimin altında. burntsushi’ye teşekkürler.