Eustáquio Rangel

Desenvolvedor, pai, metalhead

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