Eustáquio Rangel

Desenvolvedor, pai, metalhead, ciclista

Utilizando ctags em projetos Rails mais recentes

Publicado em Developer


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=test
O 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 Disqus

Artigos anteriores