## Motivação
Quando rodamos o rubocop, rodamos apenas a flag `-l`, que significa apenas checar as Cops da categoria [`Lint`](https://rubocop.readthedocs.io/en/latest/cops_lint/) Ou seja, é uma análise mais superficial que foi colocada como uma introdução ao processo de usarmos linter no dia-a-dia.
## Plano
O plano consiste em ignorar os erros existentes ao mesmo tempo que aplicamos os linters aos arquivos novos. Depois, gradativamente, vamos corrigir os erros antigos.
### Ignorando os erros antigos
Rodar `rubocop --auto-gen-config` uma vez em um repositório (exemplo no `pier-users`)
Ao rodar esse comando, o Rubocop gera uma lista de `TODO` para o repositório listando todas as ofensas antigas que serão ignoradas. O nome desse arquivo é `.rubocop_todo.yml` e funciona da seguinte maneira.
Para cada item da lista de infrações do Rubocop (chamadas de Cops), o Rubocop lista os arquivos que estão comentendo infrações e os coloca na lista de `Ignore` daquela Cop:
```
# Offense count: 7
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, conditionals
Style/AndOr:
Exclude:
- 'app/controllers/application_controller.rb'
- 'app/controllers/auth/registrations_controller.rb'
- 'app/controllers/auth/sessions_controller.rb'
- 'app/jobs/network_builder_job.rb'
- 'test/support/jsonapi_assertions.rb'
```
O arquivo principal do Rubocop `.rubocop.yml` terá apenas uma linha inicial, importando o arquivo acima.
No exemplop, a Cop [Style/AndOr](https://rubocop.readthedocs.io/en/latest/cops_style/#styleandor) não está sendo respeitada em 7 arquivos diferentes. Mas como eles foram adicionados na lista de `Exclude` então não vão apitar no CI.
Com isso, todos os erros já existentes serão ignorados, sendo então possivel trabalhar apenas em erros de arquivos novos.
## Como Resolver items
Para resolver, basta deletar um bloco de código correspondente a uma Cop do arquivo `.rubocop_todo.yml` e decidir:
- Corrigir as infrações, rodando `rubocop -a` e abrindo um PR
- Adicionar a Cop ao arquivo principal do `.rubocop.yml` com quaisquer configurações que se tenha combinado com outros devs.
De qualquer maneira, o objetivo é zerar o conteúdo do arquivo `TODO`, resolvendo as infrações ou as ignorando no `rubocop.yml`
## Sobre o projeto piloto - Users
O arquivo mais atual `.rubocop_todo.yml` e `.rubocop.yml` está no `pier-users`. Os outros projetos ainda estão rodando `rubocop -l` (apenas cops de `Lint`)
Quando o trabalho no `pier-users` for finalizado, o `.rubocop.yml` final será centralizado para ser usado em outros repositórios (localização no projeto `ops-scripts`)