Recentemente, no time que estou trabalhando, notei durante os code reviews muitas ponderações relacionadas a estilo do código. Como por exemplo:
- uso de aspas simples ou duplas para definir strings;
- uso de espaços na definição de hashes;
- tamanho máximo da linha;
- etc …
Em nosso time utilizamos Ruby como principal linguagem, portanto nada melhor que se basear no Guia de Estilo Ruby.
Porém, também é importante utilizar uma ferramenta que nos ajude a garantir que esse estilo esteja sendo aplicado, e para isso temos o Rubocop.
Rubocop
Rubocop é um analisador estático que nos auxilia a validar e aplicar um padrão de estilo em nosso código Ruby, baseando-se no Guia de Estilo Ruby
Instalando
$ gem install rubocop
As regras do Rubocop podem ser configuradas ou desabilitadas através do arquivo .rubocop.yml
, que deve estar na raiz do projeto com as configurações desejadas.
Segue abaixo um exemplo do arquivo .rubocop.yml
com algumas configurações:
inherit_from: .rubocop_todo.yml
AllCops:
Exclude:
- db/schema.rb
- db/migrate/*
- bin/*
RunRailsCops: true
Documentation:
Enabled: false
DotPosition:
EnforcedStyle: trailing
Style/EmptyLinesAroundBlockBody:
Enabled: false
Style/EmptyLinesAroundModuleBody:
Enabled: false
Style/EmptyLinesAroundClassBody:
Enabled: false
Style/EmptyLinesAroundMethodBody:
Enabled: false
Por exemplo, essa configuração está desconsiderando que linhas vazias entre o início e fim de módulos e blocos sejam violações.
Style/EmptyLinesAroundBlockBody:
Enabled: false
Style/EmptyLinesAroundModuleBody:
Enabled: false
Configurando seu editor
O Rubocop fornece algumas formas para validar seu código Ruby, que podem ser analisadas mais detalhadamente através de seu Docs. Porém, para extrair maior produtividade quanto ao seu uso, recomendo que tenha-o configurado no seu editor.
Sublime Text 3
Iremos instalar os pacotes necessários para a configuração do Rubocop através do Package Control, portanto antes dos próximos passos, será necessário sua instalação.
Será necessário a instação dos seguintes pacotes:
Basicamente, a instalação desses dois pacotes é o suficiente para ter o SublimeText integrado ao Rubocop. Porém, se você utiliza o rbenv para instalar e gerenciar o Ruby em sua máquina, será necessário informar o PATH
do Ruby ao SublimeLinter:
Tools > SublimeLinter > Open User Settings
{
"user": {
"paths": {
"linux": [],
"osx": ["~/.rbenv/shims"],
"windows": []
...
Obs1.: Nesse caso estou aplicando a configuração em um OSX, caso seu sistema operacional seja outro, basta mudar a configuração para linux
ou windows
. Você pode verificar a configuração completa aqui.
Obs2.: É necessário restartar o Sublime Text para que a configuração seja aplicada e o SublimeLinter comece a funcionar (Demorei um pouco pra descobrir isso..). Portanto, basta fechar e abrir novamente o editor.
Você vai saber que a integração funcionou quando abrir seu editor e verificar algumas marcações amarelas no seu código:
Ao fixar o cursor em uma determinada linha, que está sendo apontada pela marcação, é possível verificar no rodapé do editor a respectiva violação.
Atom
No Atom, vamos utilizar os seguintes plugins:
Vamos realizar a instalação via linha de comando, a qual eu acho mais simples.
$ apm install linter
$ apm install linter-rubocop
Após a instalação será necessário configurar PATH
do rubocop. Para isso, podemos editar diretamente o arquivo de configuração em ~/.atom/config.cson
, ou através do menu:
Atom > Config...
Agora vamos verificar onde está o rubocop, através do comando which
:
$ which rubocop
Porém, se você como eu estiver utilizando o rbenv
deverá executar o seguinte comando:
$ rbenv which rubocop
E adicionar a seguinte configuração, com o respectivo PATH
:
"linter-rubocop":
command: "/Users/gabriel/.rbenv/versions/2.3.1/bin/rubocop"
Semelhante ao Sublime Text 3, também será necessário restartar seu editor, fechando e abrindo novamente o mesmo.
E utilizando o mesmo arquivo como exemplo, podemos ver a integração do rubocop ao Atom:
O plugin do Atom oferece algumas funcionalidades legais a mais que ao do Sublime.
Um placeholder informando o tipo da violação:
Um contador e um painel detalhando as violações:
Conclusão
Se você está desenvolvendo código e espera que outros possam ler e trabalhar com ele, então é muito importante escolher um estilo consistente e garantir que seja aplicado. Ter uma ferramenta que o auxilie a aplicar esse estilo integrada ao seu editor, é essencial para manter seu código padronizado no momento em que o mesmo está sendo produzido, mantendo um código padronizado você terá menos erros e uma avaliação mais eficaz. Caso esteja desenvolvendo código Ruby, utilize o Guia de Estilo Ruby e o Rubocop para verificar se o mesmo está sendo aplicado.