O código é, no final das contas, lido com mais frequência do que é escrito, e manter a padronização é uma forma de manter a legibilidade, independentemente do desenvolvedor que passe pelo projeto. Evidentemente, um código mais fácil de ler, é mais fácil de dar manutenção. E é nesse aspecto que o Rubocop atua.
Além disso, conhecer padrões consistentes é também uma forma de aprender mais sobre a linguagem de programação em questão, e adotá-los é também uma forma de passar esse conhecimento adiante.
Ruby por si só tem como premissa ser uma linguagem fácil de se ler, e com o objetivo de aprimorar essa legibilidade e manter a consistências em códigos Ruby, o Ruby Style Guide foi criado.
O guia foi construído a partir da experiência da comunidade Ruby em si, além de usar como referência recursos importantes para a linguagem como, por exemplo, os livros “Programming Rub” e “The Ruby Programming Language”.
O Rubocop é uma ferramenta de análise de código, construída justamente a partir do Ruby Style Guide. O funcionamento dele é simples, visto que é uma gem que pode ser instalada no seu projeto, é possível executar o comando
rubocop
e seu código será analisado com base nas melhores práticas do guia de estilo Ruby. Além de verificar o estilo do código, o Rubocop se preocupa também com questões de indentação, possíveis erros de sintaxe, métricas, nomenclatura e até segurança. Cada aspecto analisado é chamado de “Cop”.
Essa é a forma como são chamadas as checagens feitas no código. Cada "cop"é agrupado em “departamentos”, categorizando cada verificação realizada. Os departamentos são:
Todos esses “cops”; são configuráveis, basta criar um arquivo .rubocop.yml na raíz do projeto. Dentre as opções, é possível excluir arquivos da análise, desabilitar cops, definir padrões a serem verificados, entre outros.
Como o Rubocop é uma gem, ele pode ser instalado de duas formas:
gem install rubocop
group :development do
gem 'rubocop', require: false
end
bundle install # no terminal
Com o Rubocop instalado, agora é possível rodar:
rubocop # analisa o projeto inteiro
rubocop app/models/foo.rb # analisa um arquivo específico
rubocop -a # corrige possíveis problemas
Exemplo corrigindo apenas problemas de formatação:
Uma forma bem prática de adotar o Rubocop no seu projeto é criando um workflow no Github Actions, desta forma, é possível colocar o Rubocop para rodar em pull requests ou quando um push é feito, por exemplo. Com isso, o Rubocop analisa as alterações feitas e aponta os problemas a serem corrigidos.
Para configurar a action é simples, basta criar um arquivo .rubocop.yml no diretório .github/workflows do seu projeto com o conteúdo abaixo:
name: RuboCop
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Ruby 2.7
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7
- name: Cache gems
uses: actions/cache@v1
with:
path: vendor/bundle
key: ${{ runner.os }}-rubocop-${{ hashFiles('**/Gemfile.lock')
}}
restore-keys: |
${{ runner.os }}-rubocop-
- name: Install gems
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Run RuboCop
run: bundle exec rubocop --parallel
O arquivo acima realizará o setup do Ruby e das gems e, no fim, rodará o Rubocop. Esse setup é usado justamente pelo próprio repositório do rails.
Usa Rails e/ou RSpec? Também é possível incluir as gems rubocop-rails e rspec-rails para ter seu código analisado conforme os guias de estilo do Rails e do RSpec. Tendo as gems instaladas, é só inserir as linhas abaixo no arquivo .rubocop.yml
require:
- rubocop-rails
Por fim, ainda é possível instalar o Rubocop como uma extensão do VSCode. Desta forma, o VSCode vai apontar em tempo real os erros que o Rubocop apontar enquanto você escreve o código, além de fornecer um comando de autocorreção que utiliza o próprio Rubocop para arrumar os pontos possíveis: