Configurando o RuboCop

Dicas - 21/Jul/2019 - por Henrique Morato

RuboCop é uma gem bastante utilizada pela comunidade Ruby, mas nem sempre queremos usar as configurações exatamente como elas nos são entregues. Pensando nisso, o RuboCop funciona de forma modular, no qual cada uma das funcionalidades é definida numa Cop – uma regra a ser verificada – sendo possível desativar, alterar seu comportamento e até criar novas Cops.

Para mudar esses comportamentos, nós usamos o arquivo .rubocop.yml. É bastante comum empresas terem seus próprios arquivos de configuração. Abaixo, você pode ver um exemplo de arquivo que costumamos usar como modelo na Campus Code. Cada projeto tem suas complexidades, mas este já serve como referência:

# Aqui na Campus Code trabalhamos bastante com projetos Rails, então fazemos uso
# da gem rubocop-rails
require:
  - rubocop-rails

# Alguns projetos podem ter .rubocop_todo.yml, então herdamos deste arquivo.
# Se ele não existir, remova essas linhas
inherit_from:
  - .rubocop_todo.yml

# Mude para a versão de Ruby a ser utilizada e inclua aqui outros arquivos que
# você considera importante que o RuboCop não execute como: node_modules, etc..
AllCops:
 TargetRubyVersion: 2.6
 Exclude:
   - 'bin/**/*'
   - 'vendor/**/*'
   - 'db/**/*'
   - 'config/**/*'
   - 'script/**/*'
   - 'spec/rails_helper.rb'

# Trabalhamos bastante com testes como a documentação viva do projeto então
# desabilitamos a Cop de documentação com comentário
Documentation:
 Enabled: false

# Esta é uma Cop polêmica, pois pode ajudar na performance. Isso se tornará
# padrão no Ruby 3, mas deixamos a seu critério. Caso deseje manter esta Cop,
# basta remover estas linhas
Style/FrozenStringLiteralComment:
 Enabled: false

# Escrevemos mais linhas em arquivos de teste do que em arquivos de 
# código, então é importante poder ter esses arquivos do tamanho necessário
Metrics/BlockLength:
 ExcludedMethods: ['describe', 'context', 'feature', 'scenario', 'let']

# Costumamos usar o padrão do RuboCop, mas caso queira alterar o tamanho de
# caracteres de uma linha, você pode fazê-lo aqui
Metrics/LineLength:
  Max: 80

# Esta é outra Cop polêmica, mas algumas vezes queremos fazer comentários de
# TODO ou outros tipos usando acentos e caracteres não ascii, por isso, é
# preciso desabilitar a Cop
AsciiComments:
  Enabled: false

Algumas referências e materiais de estudo abaixo:

Foto de perfil do autor
Henrique Morato

Dev