ripgrep 15.0
(github.com/BurntSushi)- ripgrep 15.0 é um grande lançamento que inclui várias atualizações, como correções de bugs, melhorias de desempenho e novos recursos
- Vários bugs relacionados à aplicação das regras do gitignore foram corrigidos, e houve otimização de memória no processamento de arquivos grandes
- Foi adicionado suporte à plataforma Windows aarch64, e o suporte a powerpc64 foi descontinuado
- Entre os novos recursos estão o suporte simultâneo a --json e flags de substituição, além de suporte a chaves aninhadas em globs
- Com melhorias gerais de desempenho, correções de erros e aprimoramentos de usabilidade, a produtividade dos desenvolvedores aumenta
Visão geral do ripgrep 15.0
ripgrep 15.0 é a versão principal mais recente do ripgrep e inclui principalmente correções de bugs, pequenas melhorias de desempenho e adição de novos recursos de menor porte
ripgrep é uma ferramenta que pesquisa recursivamente padrões de expressão regular no diretório atual, linha por linha
Por padrão, segue as regras do gitignore e ignora automaticamente arquivos/diretórios ocultos e arquivos binários
Principais mudanças
- Foram corrigidos vários bugs relacionados à correspondência com gitignore
- Correção de um bug frequentemente relatado relacionado à aplicação das regras de gitignore de diretórios superiores
- Foi corrigido um bug de aumento no uso de memória ao processar arquivos gitignore muito grandes
- Em
rg -vf file, quandofileestá vazio, agora tudo passa a corresponder - A flag
-r/--replaceagora funciona corretamente junto com--json - Alguns repositórios Jujutsu (jj) também passam a ser reconhecidos como repositórios Git, fazendo com que o ripgrep siga o gitignore do jj
- Globs agora oferecem suporte a chaves aninhadas
Suporte a plataformas
- Agora são fornecidos binários de release para aarch64 no Windows
- Binários de release para powerpc64 não são mais fornecidos
- A descontinuação ocorreu devido a problemas no workflow de release do CI; caso deseje testes e suporte, isso pode ser solicitado
- Os binários do ripgrep são compilados com LTO (otimização de tempo de link completa), o que traz pequeno ganho de desempenho e redução de tamanho
Melhorias de desempenho
- No Windows, quando a opção
-z/--search-zipnão é usada, houve melhora de desempenho com a desativação da busca por binário auxiliar - No Windows, a omissão da normalização de caminhos ao exibir hyperlinks melhora a velocidade
- Melhor desempenho ao lidar com valores grandes usando
-A/--after-context
Correções de bugs
- Foram corrigidos vários problemas relacionados a gitignore, incluindo a não aplicação do gitignore de diretórios superiores
- O comando
rg -vf fileem arquivos vazios foi ajustado para corresponder a tudo - Foi adicionado tratamento para ignorar o marcador UTF-8 BOM em
.gitignoree afins - Otimização do uso de memória ao processar arquivos gitignore grandes
- Corrigido erro na saída do número de bytes pesquisados ao usar
--stats - Corrigido erro no processamento de globs terminados em
. - Resolvido o problema de indicação de excesso de correspondências ao combinar
-m/--max-countcom-U/--multiline - Ao usar a flag
-r/--replace, os terminadores de linha agora são preservados - Resolvido o erro de inversão do código de saída ao usar a combinação
-q --files-without-match - Resolvida a inconsistência na documentação entre
-c/--counte--files-with-matches - Corrigido um problema raro de panic com expressões regulares grandes e entradas grandes
- Tratamento de escape de hífen em nomes de flags de opções na man page
- Compilação estática de PCRE2 no release para macOS aarch64
- Corrigido um bug no filtro de ignorar diretórios superiores ao pesquisar arquivos ocultos colocados em whitelist
- Corrigido problema de estatísticas resumidas incorretas ao usar a flag
--json - Corrigido erro no processamento de gitignore ao pesquisar por caminhos absolutos e gitignore global
- Corrigido o problema de panic que ocorria ao combinar
-U/--multilinecom-r/--replace
Melhorias de recursos
- O conjunto padrão de tipos de arquivo foi amplamente expandido e aprimorado
-r/--replacefoi melhorado para ser compatível com--json- O recurso de autocompletar do fish shell foi aprimorado para refletir o arquivo de configuração do ripgrep
- Foi adicionado italic aos atributos de estilo disponíveis em
--color - O diretório
.jjpassa a ser tratado como repositório Git - Ao usar multithreading, foi adicionada a capacidade de agendar a busca na ordem dos arquivos especificados na CLI
- Foram adicionados artefatos de release
aarch64para Windows - Foi adicionado o tipo de cor highlight, permitindo estilizar o texto não correspondente em linhas com correspondência
- Foi adicionada a funcionalidade de alternâncias aninhadas aos crates globs e globset
- O autocompletar de
--hyperlink-formatfoi melhorado em bash, fish e zsh
1 comentários
Comentários do Hacker News
O ripgrep é uma ferramenta que realmente me economizou muito tempo ao longo dos últimos anos; é indispensável e a primeira coisa que instalo sempre que começo em um sistema novo, especialmente ao explorar codebases antigas. Uma pequena frustração é que, ao usar a opção
-F(tratar como literal), ainda há casos em que alguns caracteres continuam sendo tratados como especiais e exigem escape. Não lembro exatamente quais caracteres eram, mas ainda assim fico feliz toda vez que vejo o ripgrep continuar sendo atualizado.-F/--fixed-stringsdesativa 100% dos recursos de expressão regular no padrão e trata tudo apenas como literal; se algum escape for necessário, provavelmente é algo exigido pelo shell.O
rgparece uma ferramenta mágica, mas na prática é o resultado de engenharia excepcional, melhorias constantes e do aproveitamento máximo do incrível desempenho do hardware que todos nós usamos diariamente. Também foi uma inovação que abriu caminho para que desenvolvedores naveguem e entendam código mais rápido, sem precisar criar padrões separados como LSP.A codebase do ripgrep é um dos melhores exemplos de "preparar uma bebida, sentar na cadeira mais confortável e mergulhar em um software de alta qualidade". Você vai clicando aqui e ali pelos cantos do código e só admirando.
Assim como o
fd, orgé uma ferramenta de linha de comando que dá prazer de usar de verdade. Adoro essas ferramentas novas baseadas em comandos.fdtrabalham na Astral. Aí fez sentido por que o software da Astral é tão bom.rg <string>oufd <string>.Um recurso que eu gostaria de ver adicionado pessoalmente é uma flag de "extensão", que funcionasse como
-g, mas tratando o argumento de entrada como extensão (por exemplo:rg -e c,h). Na maioria das vezes, quando uso um padrão glob, meu objetivo é combinar extensão.-t/--type; dá para usar como-tc, como no seu exemplo. Se for uma extensão que não existe no ripgrep, também dá para definir um type manualmente.O ripgrep foi o principal motivo de eu começar a me interessar por Rust. Ele funcionava de forma tão polida que o fato de ter sido escrito em Rust me deixou ainda mais curioso. Mesmo vários anos depois, ainda uso
rgtodos os dias.Recentemente descobri a opção
--replacee fiquei bastante impressionado. Passei a usá-la junto com--type, e foi meio frustrante perceber que eu não sabia que esses recursos tão legais existiam. Daqui para frente pretendo ler as release notes com atenção e ficar mais atento a novidades. Também gostei das melhorias de integração com ojj.É uma ótima ferramenta e muito fácil de usar. Comecei usando no Linux, mas hoje também uso no Windows. Graças a ela, agora passei a usar expressões regulares diretamente na busca em vez de wildcards.
greppadrão, e o comandorg --filestambém é útil.Nesta semana fiz uma função bash para executar o ripgrep apenas em arquivos rastreados pelo git.
Dá para pesquisar muito mais rápido em diretórios com muitos arquivos binários ou arquivos ocultos. Para pesquisar arquivos ocultos é preciso usar a opção
-uu, mas essa opção também faz a busca em arquivos binários. Quando o número de arquivos chega às centenas, o própriogit ls-filesjá fica lento.gitignore, então se comporta de forma parecida comgit ls-files. Só para esclarecer: a opção-uudiz ao ripgrep para ignorargitignoree arquivos ocultos, mas ele ainda pula arquivos binários. Para incluir binários também, é preciso-uuu. O maior problema da função é que, se você usar no repositório do kernel Linux, aparece o erro de argument list too long, então eu troquei porxargs. Se alguém tiver um exemplo em quegit ls-files -z | xargs -0 rg ...seja mais rápido do que simplesmenterg ..., por favor compartilhe.-uu, dá para usar a flag-.(apenas pesquisar arquivos ocultos). Seria bom poder pesquisar arquivos ocultos rastreados pelo git, mas o overhead de consultar a lista de arquivos não é algo desprezível, mesmo se for feito em Rust.git grep.Uso o ripgrep todos os dias no trabalho, tanto na linha de comando quanto nas buscas do VSCode. Meus agradecimentos ao burntsushi.