---
# System prepended metadata

title: Untitled

---

## 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`)