ripgrep 15.0
(github.com/BurntSushi)- ripgrep 15.0 es una versión importante que incluye varias actualizaciones, como corrección de errores, mejoras de rendimiento y nuevas funciones
- Se corrigieron varios errores relacionados con la aplicación de reglas de gitignore, y se realizó una optimización de memoria al procesar archivos grandes
- Se agregó soporte para la plataforma Windows aarch64 y se retiró el soporte para powerpc64
- Entre las nuevas funciones están la compatibilidad simultánea de --json y flags de reemplazo, y el soporte de llaves anidadas en globs
- Las mejoras generales de rendimiento, correcciones de errores y mejoras de usabilidad aumentan la productividad de los desarrolladores
Resumen de ripgrep 15.0
ripgrep 15.0 es la versión mayor más reciente de ripgrep, centrada principalmente en correcciones de errores, pequeñas mejoras de rendimiento y la incorporación de nuevas funciones menores
ripgrep es una herramienta que busca recursivamente patrones de expresiones regulares por líneas en el directorio actual
De forma predeterminada sigue las reglas de gitignore y omite automáticamente archivos/directorios ocultos y archivos binarios
Cambios principales
- Se corrigieron varios errores relacionados con el matching de gitignore
- Se resolvió un error reportado con frecuencia relacionado con la aplicación de reglas de gitignore de directorios superiores
- Se solucionó un error de aumento en el uso de memoria al procesar archivos gitignore muy grandes
- En
rg -vf file, sifileestá vacío, ahora se hace match con todo - El flag
-r/--replaceahora funciona correctamente junto con--json - Algunos repositorios de Jujutsu (jj) ahora también se reconocen como repositorios git, por lo que ripgrep sigue el gitignore de jj
- Los globs ahora admiten llaves anidadas
Soporte de plataformas
- Ahora se ofrecen nuevos binarios de lanzamiento para Windows aarch64
- Ya no se ofrecen binarios de lanzamiento para powerpc64
- Se suspendieron por problemas en el workflow de releases de CI; se puede solicitar si se desea prueba y soporte
- El binario de ripgrep se compila con LTO (optimización total en tiempo de enlace), lo que aporta una ligera mejora de rendimiento y reducción de tamaño
Mejoras de rendimiento
- En Windows, si no se usa la opción
-z/--search-zip, mejora el rendimiento al desactivar la búsqueda de binarios helper - En Windows, mejora la velocidad al omitir la normalización de rutas al mostrar hipervínculos
- Mejora el rendimiento al manejar valores grandes con
-A/--after-context
Corrección de errores
- Se corrigieron múltiples problemas relacionados con gitignore, como la falta de aplicación del gitignore de directorios superiores
- Se corrigió para que el comando
rg -vf filesobre un archivo vacío haga match con todo - Se agregó procesamiento para ignorar el marcador UTF-8 BOM en
.gitignorey similares - Optimización del uso de memoria al procesar archivos gitignore grandes
- Se corrigió el error en la salida de bytes buscados al usar
--stats - Se corrigió un error al procesar globs que terminan en
. - Se resolvió el problema de mostrar exceso de coincidencias al usar la combinación
-m/--max-county-U/--multiline - Se cambió
-r/--replacepara que preserve el terminador de línea - Se resolvió el error de inversión del código de salida al usar la combinación
-q --files-without-match - Se resolvió la inconsistencia de documentación entre
-c/--county--files-with-matches - Se corrigió un problema raro de panic con expresiones regulares grandes y entradas grandes
- Se procesó el escape de guiones en los nombres de flags de opciones en la man page
- Se habilitó la compilación estática de PCRE2 en la release de macOS aarch64
- Se corrigió un error del filtro de ignorar directorios superiores al buscar archivos ocultos incluidos en whitelist
- Se corrigió el problema de estadísticas de resumen incorrectas al usar el flag
--json - Se corrigieron errores de procesamiento de gitignore al buscar con rutas absolutas y gitignore global
- Se corrigió un problema de panic que ocurría al usar
-U/--multilinejunto con-r/--replace
Mejoras de funciones
- El conjunto predeterminado de tipos de archivo fue ampliado y mejorado en gran medida
- Se mejoró
-r/--replacepara que sea compatible con--json - Se mejoró el autocompletado de fish shell para que refleje el archivo de configuración de ripgrep
- Se agregó italic a los atributos de estilo disponibles para
--color - El directorio
.jjahora se trata como un repositorio git - Al usar multithreading, se agregó una función para programar la búsqueda siguiendo el orden de los archivos especificado en el CLI
- Se agregaron artefactos de release
aarch64para Windows - Se agregó el tipo de color highlight, que permite aplicar estilo al texto no coincidente en líneas con coincidencias
- Se agregó la función de alternativas anidadas en globs y en el crate globset
- Se mejoró el autocompletado de
--hyperlink-formaten bash, fish y zsh
1 comentarios
Opiniones en Hacker News
ripgrep es una herramienta que de verdad me ha ahorrado muchísimo tiempo durante los últimos años; es de las primeras cosas que instalo cada vez que empiezo en un sistema nuevo, y es indispensable sobre todo al explorar bases de código antiguas. Lo único que me decepciona un poco es que, al usar la opción
-F(tratar como literal), todavía hay algunos caracteres que se siguen tratando como especiales y requieren escape. No recuerdo exactamente cuáles eran, pero aun así me alegra cada vez que veo que ripgrep sigue actualizándose.-F/--fixed-stringsdesactiva al 100% las funciones de expresiones regulares en el patrón y lo trata solo como literal. Si hace falta escapar algo, probablemente se deba a que el shell lo exige.rges una herramienta que se siente casi como magia. En realidad, es el resultado de una ingeniería sobresaliente, mejoras constantes y de aprovechar al máximo el increíble rendimiento del hardware que todos usamos a diario. Además, es una innovación que abrió la puerta para que los desarrolladores puedan explorar y entender código más rápido, sin necesidad de crear por separado estándares como LSP.smithingen este contexto.El codebase de ripgrep es el mejor ejemplo de "prepárate una bebida, siéntate en tu silla más cómoda y ponte a leer software de alta calidad". Uno se pone a hacer clic por todos los rincones del código y no deja de admirarlo.
Igual que
fd,rges una herramienta de línea de comandos que da gusto usar. Me encantan este tipo de herramientas nuevas basadas en comandos.rg <string>ofd <string>.Una función que personalmente me gustaría que añadieran es un flag de "extensión", que funcione como
-gpero tratando los argumentos de entrada como extensiones (por ejemplo, algo comorg -e c,h). La mayoría de las veces que uso patrones glob, en realidad lo que quiero es hacer match por extensión.-t/--type; en un caso como tu ejemplo se puede usar como-tc. Si ripgrep no trae esa extensión, también puedes definir tu propio type.ripgrep fue una de las razones principales por las que empecé a interesarme en Rust. Funciona con un nivel de pulido tan alto que me dio aún más curiosidad saber que estaba hecho en Rust. Incluso ahora, años después, sigo usando
rgtodos los días.nibblesfue la razón principal por la que me interesé en qbasic. Estaba tan bien hecho que me llamó la atención que estuviera escrito en qbasic, y gracias a eso terminé usandonibblestodos los días.Hace poco descubrí la opción
--replacey me impresionó bastante. La he estado usando junto con--type, y me dio un poco de pena no haber sabido antes que existían funciones tan buenas. De ahora en adelante pienso leer las release notes con más cuidado y estar más atento a las novedades. También me alegra la mejora de integración con jj.Es una gran herramienta y además muy fácil de usar. Empecé usándola en Linux, pero ahora también la uso en Windows. Gracias a esta herramienta, ahora aplico expresiones regulares directamente en las búsquedas en vez de usar wildcards.
grepbásico, y el comandorg --filestambién es útil.Esta semana hice una función de bash para ejecutar ripgrep solo sobre archivos rastreados por git.
En directorios con muchos archivos binarios o archivos dot, permite buscar mucho más rápido. Para buscar en archivos dot hace falta la opción
-uu, pero esa opción también termina buscando en archivos binarios. Cuando hay cientos de archivos,git ls-filesen sí mismo se vuelve lento.gitignore, así que se comporta de forma parecida agit ls-files. Como referencia,-uule dice a ripgrep que ignoregitignorey los archivos ocultos, pero aun así sigue saltándose los archivos binarios. Para incluir también binarios hace falta-uuu. El mayor problema de tu función es que, si la usas en el repo del kernel de Linux, aparece el error de que la lista de argumentos es demasiado larga. Por eso lo cambié axargs. Si tienes un ejemplo dondegit ls-files -z | xargs -0 rg ...sea más rápido que simplementerg ..., compártelo por favor.-.en lugar de-uupara buscar solo en archivos ocultos. Estaría bien poder buscar en archivos ocultos rastreados por git, pero el overhead de consultar la lista de archivos no es tan despreciable como para ignorarlo, incluso estando implementado en Rust.git grep.Uso ripgrep todos los días en el trabajo, tanto en la línea de comandos como al buscar desde vscode. Siempre lo uso. Gracias a burntsushi.