Rubocop Linelength: Como ignorar linhas com comentários?

109

Usando um aplicativo Rails 4, gostaria que o Rubocop ignorasse as linhas com comentários (apenas um comentário ou algum código com um comentário de fim de linha) ao verificar se uma linha é muito longa. Existe uma maneira de fazer isso?

Twiek
fonte

Respostas:

197

Existe uma maneira de ignorar os policiais em uma base por linha.

Também existe uma maneira de fazer isso via arquivo de configuração.

Corre rubocop --auto-gen-config e ele irá gerar um arquivo que você pode usar para desativar as ofensas.

O comando também dá uma dica sobre o que fazer para carregar essas opções.

Linha por linha, você também pode ativar e desativar os policiais.

# rubocop:disable RuleByName
This is a long line 
# rubocop:enable RuleByName

Você também pode fazer mais de uma regra por vez em seu código.

# rubocop:disable BlockComments, AsciiComments

Usando uma diretiva inline, a diretiva torna-se válida apenas para essa linha, e seria assim:

# Thanks to @jnt30 for the comment!
method(argument) # rubocop:disable SomeRule, SomeOtherRule

Você pode ler muito mais sobre RuboCop em seu manual oficial .

Para encontrar todos os nomes de regras vale a pena procurar nos arquivos de configuração do rubocop

cyberwiz diz - "execute rubocop -Dquando eu precisar dos nomes das regras ao invés de olhar na documentação." Atualização : este é agora o comportamento padrão sem a bandeira.

vgoff
fonte
1
Bom, os comentários podem explicar o desvio de um estilo que tem sido aceito pela equipe, então isso não é uma coisa ruim, certo? Caso contrário, você o coloca no arquivo rubocop.yml e, então, não é uma exceção de estilo aceita e não precisa de um comentário. O comentário diz "Eu pretendia fazer isso!". Não é uma coisa ruim.
vgoff
1
comentários não são códigos, portanto, verificá-los é semanticamente diferente e o rubocop da IMO deve tratá-lo dessa forma.
phoet de
2
Os comentários são parte do código e quando você lida com código por e-mail ou em um terminal. Acho que é de mau gosto não ter seus comentários seguindo os mesmos comprimentos de linha que foram adotados pela "equipe" como o código. Eles não devem interromper o fluxo apenas porque são comentários. Tenho certeza de que o rubocop não verifica os comentários para nada, além de diretivas, semanticamente (significativamente). Ele verifica o comprimento da linha e o estilo dos comentários. Então não, não está procurando sentido, está apenas checando o estilo. Não descarte o fato de que "comentários não são códigos" não precisa ser.
vgoff
Na verdade, mesmo a #!/bin/env rubylinha de comentário é um comentário, mas código, e semanticamente importante. Os comentários nem sempre são apenas "comentários".
vgoff
1
@Twiek, há algo faltando nesta resposta que você está procurando?
vgoff
35

É possível definir padrões de regex para ignorar automaticamente certas linhas rubocop.yml, então você pode escolher ignorar todas as linhas que começam com um #caractere:

Metrics/LineLength:
  Max: 80
  IgnoredPatterns: ['\A#']

Isso poderia ser melhorado para que as linhas de comentários "recuassem" (ou seja, um espaço em branco seguido por um # caractere) também sejam ignoradas, se for o que você deseja.

Observe que isso não leva em consideração as linhas de código que terminam com um comentário, embora:

some_code(that_does_something) # This line would NOT be ignored by Rubocop.
GoBusto
fonte
9
Você pode expandir essa regexp incluindo linhas que podem ter espaços em branco:IgnorePatterns: ['(\A|\s)#']
poustovitss
1
Obrigado @poustovitss. Há um erro de digitação: deve ser IgnoredPatternsem vez IgnorePatterns(que está faltando a letra 'd').
Horacio
9

Você pode usar o seguinte comentário com rubocop para ignorar uma regra específica:

# rubocop:disable Metrics/LineLength
def this_could_be_a_very_long_line_that_extends_forever_into_infinity
end
# rubocop:enable Metrics/LineLength

Você também pode ignorar arquivos inteiros adicionando-os a .rubocop.yml:

AllCops:
  Exclude:
    - path/to/file.rb

fonte
6

Acho que a ideia básica aqui é que você deseja impor o comprimento da linha, não importa o que esteja depois de n caracteres. o padrão para 80 caracteres é algum culto de carga para janelas de terminais antigos que só podiam conter aquele número de caracteres. a única opção que vi no código é uma opção para permitir urls que podem exceder o limite de caracteres.

você pode ignorar arquivos inteiros , acho que não é isso que você está procurando.

phoet
fonte
8
Hoje em dia, a ideia por trás de 80 chars não é tanto um "culto à carga" para o terminal, ainda há uma razão lógica para isso: qualquer um pode dividir seu editor ou janelas de IDE como quiser, desde que sejam apenas mais largas com mais de 80 caracteres, eles não precisarão alterar a largura ou a experiência de embalagem.
Jason Antman
2
IMO, se você não tem um IDE que suporte soft wrapping, seu ferramental não está atualizado.
phoet de
8
80 caracteres também é bastante legível, enquanto 40 ou 200 é menos, então também é uma questão de usabilidade
Toni Leigh
# 1 "desde que tenham apenas mais de 80 caracteres" 800x600 é mais largo que 80 caracteres, e você tem o mesmo problema ao visualizar arquivos de 80 caracteres lado a lado. Isso é um absurdo e só se aplica a 1366 res. Com mais de 1920 assumindo o controle, o próximo argumento será "Eu posso dividir 3, 4 arquivos"
André Figueiredo
1
nós o tínhamos em 80, depois mudamos para 120. Olhar para PR enquanto fazia revisão de código no Github em uma exibição de tela dividida em laptops de 13 "tornou-se um problema. Voltamos para 80.
AndreiMotinga