Utilizando ctags em projetos Rails mais recentes
Publicado em Developer
ctags rails ruby vim
Estamos com alguns projetos aqui na empresa que já usam versões mais novas de Ruby e de Rails, mais especificamente as versões 6.x.x. Conhecidamente, as versões mais novas de Rails utilizam o Webpacker para fazer o gerenciamento do JavaScript, CSS e assets estáticos como imagens e fontes. Particularmente, eu não gostei dessa mudança, com as razões que podem ser expostas em algum outro post (não sei se vai existir, mas seria de um teor meio ácido em relação à estrutura que tem por trás do mundo JavaScript). Mas enfim, nesse projeto temos pouquíssimas dependências inseridas no package.json, e mesmo essas já deram um trabalho danado de saber como encaixar, afinal, hoje temos uns 5 jeitos de instalar as dependências com o yarn e depois tentar expor elas ali no application.js, basicamente não tem algo sólido que funcione e muitas vezes vamos no chute (epa, comecei o segundo post já).
Levando em conta essas pouquíssimas dependências de JavaScript que temos no projeto, toda vez que edito um arquivo, o meu editor, que é o Vim/Neovim (costumo chavear entre eles) aciona o plugin gutentags, que por sua vez, aciona o ctags para gerar um arquivo chamado tags, que é um mapa dos métodos e classes que encontra na estrutura de diretórios do projeto, de forma à utilizar dentro do Vim para fazer navegação fácil no código. Se vocês não conhecem o ctags, vale a pena conhecer.
Mas algo estranho estava acontecendo: toda vez que eu salvava um arquivo ou saia do editor, estava demorando demais. Mas bastante mesmo. Cheguei a desconfiar que estava rolando alguma coisa estranha no editor ou mesmo no sistema operacional, mas comecei a comentar alguns dos plugins que utilizo no editor para ver se melhorava. Nada.
Em uma das últimas vezes que isso aconteceu, enquanto demorava, abri o htop para dar uma olhada, e olha lá o ctags trabalhando. Resolvi dar uma olhada em porque estava demorando tanto, e fui ver o arquivo ctags:
$ ls -lah tags -rw-rw-r-- 1 taq taq 1,1G tags
Jesus Maria José! Mais de 1 Giga de tags!!! Abri o arquivo para dar uma olhada, e estava um pesadelo de node_modules lá dentro. No esquema novo do Rails com o Webpacker, parece que é feito download da internet inteira para o seu computador, e o ctags estava indexando tudo o que tinha lá! A solução foi passar uma máscara para ignorar alguns diretórios e padrões. O node_modules era o culpado da maior parte da "sujeira" encontrada, tanto pelos próprios arquivos como para outros que gerava no framework, então cheguei uma solução como essa, que indexa tudo o que eu preciso para navegar no projeto:
$ ctags -R --exclude=node_modules --exclude=public --exclude=coverage --exclude=testO que fez com que o arquivo de tags ficasse assim:
$ ls tags -rw-rw-r-- 1 taq taq 278K tags
Bem melhor, hein? Para melhorar ainda mais, eu meio que chutei o balde em alguns formatos específicos de arquivos que eu não queria as tags (JavaScript de modo geral) e terminei assim:
$ ls tags -rw-rw-r-- 1 taq taq 131K tags
Convém verificar se o editor/ferramenta que você utiliza usa em background o ctags e se existe a opção de ignorar padrões. Pode acelerar muito o seu uso, dependendo de projetos que saem fazendo download da internet inteira.
Comentários
Sem nenhum comentário.
comments powered by DisqusArtigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300