ripgrep 15.0
(github.com/BurntSushi)- ripgrep 15.0 est une version majeure qui inclut diverses mises à jour, notamment des corrections de bugs, des améliorations de performances et de nouvelles fonctionnalités
- De nombreux bugs liés à l’application des règles gitignore ont été corrigés, et une optimisation mémoire a été effectuée pour le traitement des fichiers volumineux
- La prise en charge de la plateforme Windows aarch64 a été ajoutée, tandis que la prise en charge de powerpc64 a été abandonnée
- Parmi les nouvelles fonctionnalités figurent la prise en charge simultanée de
--jsonet des drapeaux de remplacement, ainsi que la prise en charge des accolades imbriquées dans les globs - Les améliorations globales des performances, les corrections d’erreurs et les gains d’ergonomie augmentent la productivité des développeurs
Vue d’ensemble de ripgrep 15.0
ripgrep 15.0 est la dernière version majeure de ripgrep, qui comprend principalement des corrections de bugs, de légères améliorations de performances et l’ajout de petites nouvelles fonctionnalités
ripgrep est un outil qui recherche récursivement des motifs d’expressions régulières, ligne par ligne, dans le répertoire courant
Par défaut, il respecte les règlesgitignoreet ignore automatiquement les fichiers/répertoires cachés ainsi que les fichiers binaires
Principaux changements
- Plusieurs bugs liés au matching de gitignore ont été corrigés
- Résolution d’un bug fréquemment signalé concernant l’application des règles
gitignoredes répertoires parents
- Résolution d’un bug fréquemment signalé concernant l’application des règles
- Le bug d’augmentation de l’utilisation mémoire lors du traitement de très gros fichiers
gitignorea été corrigé rg -vf filea été modifié pour tout faire correspondre lorsquefileest vide- Le drapeau
-r/--replacefonctionne désormais correctement avec--json - Certains dépôts Jujutsu (jj) sont désormais reconnus comme des dépôts Git, ce qui permet à ripgrep de suivre le
gitignorede jj - Les globs prennent désormais en charge les accolades imbriquées
Prise en charge des plateformes
- De nouveaux binaires de release sont fournis pour Windows aarch64
- Les binaires de release pour powerpc64 ne sont plus fournis
- Arrêt dû à des problèmes dans le workflow CI de release ; il est possible d’en faire la demande si des tests et un support sont souhaités
- Les binaires ripgrep sont compilés avec LTO (Link Time Optimization), ce qui apporte un léger gain de performances et une réduction de taille
Améliorations des performances
- Sur Windows, les performances sont améliorées lorsque l’option
-z/--search-zipn’est pas utilisée, grâce à la désactivation de la recherche de binaires auxiliaires - Sur Windows, l’absence de normalisation des chemins lors de l’affichage des hyperliens améliore la vitesse
- Les performances sont améliorées pour le traitement de grandes valeurs lors de l’utilisation de
-A/--after-context
Corrections de bugs
- Correction de nombreux problèmes liés à
gitignore, notamment la non-application du gitignore des répertoires parents - La commande
rg -vf filesur un fichier vide a été corrigée pour tout faire correspondre - Ajout de la prise en charge de l’ignorance du marqueur BOM UTF-8 dans
.gitignoreet autres fichiers similaires - Optimisation de l’utilisation mémoire lors du traitement de gros fichiers
gitignore - Correction d’une erreur d’affichage du nombre d’octets recherchés avec
--stats - Correction d’une erreur dans le traitement des globs se terminant par
. - Résolution d’un problème d’indication de dépassement du nombre de correspondances avec la combinaison
-m/--max-countet-U/--multiline - Le drapeau
-r/--replacea été modifié pour préserver les fins de ligne - Résolution d’une erreur d’inversion du code de sortie avec la combinaison
-q --files-without-match - Correction d’une incohérence de documentation entre
-c/--countet--files-with-matches - Correction d’un problème rare de panic avec de grandes expressions régulières et de grosses entrées
- Échappement des tirets dans les noms de drapeaux d’option dans la page man
- Compilation statique de PCRE2 dans la release macOS aarch64
- Correction d’un bug du filtre d’ignorance des répertoires parents lors de la recherche de fichiers cachés mis en liste blanche
- Correction de statistiques récapitulatives incorrectes lors de l’utilisation du drapeau
--json - Correction d’erreurs de traitement de
gitignorelors de la recherche avec des chemins absolus et dans legitignoreglobal - Correction d’un problème de panic avec la combinaison
-U/--multilineet-r/--replace
Améliorations fonctionnelles
- L’ensemble par défaut des types de fichiers a été largement étendu et amélioré
-r/--replacea été amélioré pour être compatible avec--json- L’autocomplétion de fish shell a été améliorée pour prendre en compte le fichier de configuration de ripgrep
- italic a été ajouté aux attributs de style utilisables avec
--color - Le répertoire
.jjest traité comme un dépôt Git - En cas d’utilisation du multithreading, ajout d’une fonctionnalité permettant de planifier la recherche dans l’ordre des fichiers spécifié en CLI
- Ajout des artefacts de release
aarch64pour Windows - Ajout du type de couleur highlight, qui permet de styliser le texte non correspondant dans les lignes contenant une correspondance
- Ajout de la fonctionnalité d’alternatives imbriquées dans les crates globs et globset
- L’autocomplétion de
--hyperlink-formata été améliorée dans bash, fish et zsh
1 commentaires
Avis sur Hacker News
ripgrep est un outil qui m’a vraiment fait gagner énormément de temps ces dernières années ; c’est l’un des tout premiers outils que j’installe quand je démarre un nouveau système, et il est indispensable, surtout pour explorer d’anciennes bases de code ; mon seul regret, c’est qu’avec l’option
-F(traitement littéral), certains caractères semblent encore parfois être traités comme des caractères spéciaux nécessitant un échappement ; je ne me souviens plus exactement lesquels, mais je suis toujours heureux de voir ripgrep continuer à être mis à jour-F/--fixed-stringsdésactive à 100 % les fonctionnalités d’expression régulière dans le motif et le traite uniquement comme du littéral ; s’il faut échapper quelque chose, c’est probablement le shell qui l’exigergdonne l’impression d’être magique ; en réalité, c’est le résultat d’une ingénierie exceptionnelle, d’améliorations continues, et d’une exploitation maximale des performances matérielles incroyables que nous utilisons tous au quotidien ; c’est aussi une innovation qui a ouvert la voie à une navigation et une compréhension du code plus rapides pour les développeurs, sans avoir besoin de créer un standard séparé comme lspLa base de code de ripgrep est un exemple parfait du genre « préparez-vous une boisson, installez-vous dans votre fauteuil le plus confortable et partez lire du logiciel de haute qualité » ; on clique partout dans le code en admirant ce qu’on voit
Comme fd, rg est un outil en ligne de commande réellement agréable à utiliser ; j’aime beaucoup ces nouveaux outils orientés commandes
rg <string>oufd <string>suffitLa fonctionnalité que j’aimerais personnellement voir ajoutée est un drapeau « extension » : quelque chose qui fonctionnerait comme
-g, mais traiterait l’argument d’entrée comme une extension (par exemple :rg -e c,h) ; la plupart du temps, quand on utilise des motifs glob, c’est pour faire correspondre des extensions-t/--type; on peut l’utiliser comme-tcdans votre exemple ; et si l’extension n’existe pas dans ripgrep, on peut aussi définir son propre typeripgrep a été l’une des principales raisons pour lesquelles j’ai commencé à m’intéresser à rust ; il fonctionnait avec un tel niveau de finition que le fait qu’il soit écrit en rust a éveillé encore plus ma curiosité ; plusieurs années plus tard, j’utilise toujours
rgtous les joursJ’ai découvert récemment l’option
--replace, et j’ai été assez impressionné ; en l’utilisant avec--type, je me suis dit que c’était dommage de ne pas avoir su plus tôt que ce genre de fonctionnalités existaient ; à l’avenir, je compte lire les notes de version plus attentivement pour mieux repérer les nouveautés ; je suis aussi heureux des améliorations d’intégration avec jjC’est un excellent outil, tout en restant très simple à utiliser ; j’ai commencé à l’utiliser sur Linux, et maintenant je l’utilise aussi sur Windows ; grâce à cet outil, je fais désormais directement des recherches avec des expressions régulières au lieu d’utiliser des jokers
rg --filesest aussi utileCette semaine, j’ai créé une fonction bash pour exécuter ripgrep uniquement sur les fichiers suivis par git
Cela permet de chercher bien plus vite dans les répertoires contenant beaucoup de fichiers binaires ou de fichiers cachés ; pour rechercher dans les fichiers cachés, il faut l’option
-uu, mais cette option fait aussi chercher dans les fichiers binaires ; quand il y a plusieurs centaines de fichiers,git ls-fileslui-même devient lentgitignore, donc son comportement ressemble à celui degit ls-files; à noter que l’option-uusignifie que ripgrep doit ignorergitignoreet les fichiers cachés, mais il saute toujours les fichiers binaires ; pour inclure aussi les fichiers binaires, il faut-uuu; le plus gros problème de cette fonction, c’est qu’en l’utilisant sur le dépôt du noyau Linux, on obtient une erreur disant que la liste d’arguments est trop longue ; je l’ai donc remplacée par xargs Si quelqu’un a un exemple oùgit ls-files -z | xargs -0 rg ...est plus rapide qu’un simplerg ..., je veux bien le voir-uu, on peut utiliser le drapeau-.(recherche dans les fichiers cachés uniquement) ; ce serait bien de pouvoir chercher dans les fichiers cachés suivis par git, mais le surcoût généré par la requête de la liste des fichiers reste non négligeable, même si c’est écrit en Rustgit grepJ’utilise ripgrep tous les jours au travail, aussi bien en ligne de commande que pour les recherches dans vscode ; merci à burntsushi