Rubocop Linelength: come ignorare le righe con i commenti?


109

Utilizzando un'app Rails 4 vorrei che Rubocop ignorasse le righe con commenti (solo un commento o un codice con un commento di fine riga) quando controlla se una riga è troppo lunga. C'è un modo per fare questo?

Risposte:


197

C'è un modo per ignorare i poliziotti per linea.

C'è anche un modo per farlo tramite il file di configurazione.

Esegui rubocop --auto-gen-confige genererà un file che puoi utilizzare per disabilitare i reati.

Il comando fornisce anche un suggerimento su cosa fare per caricare quelle opzioni.

Riga per riga, puoi abilitare e disabilitare anche i poliziotti.

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

Puoi anche eseguire più di una regola alla volta nel codice.

# rubocop:disable BlockComments, AsciiComments

Usando una direttiva inline, la direttiva diventa valida solo per quella riga e sarebbe simile a questa:

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

Puoi leggere un sacco di più su RuboCop nel suo manuale ufficiale .

Per trovare tutti i nomi delle regole vale la pena cercare nei file di configurazione di rubocop

cyberwiz dice: "esegui rubocop -Dquando ho bisogno dei nomi delle regole invece di cercare nella documentazione". Aggiornamento : questo è ora il comportamento predefinito senza il flag.


1
Ebbene, i commenti possono spiegare la deviazione da uno stile che è stato accettato dalla squadra, quindi questa non è una brutta cosa, giusto? Altrimenti lo metti nel file rubocop.yml, quindi non è un'eccezione di stile accettata e non ha bisogno di un commento. Il commento dice "Volevo farlo!". Non è per niente male.
vgoff

1
i commenti non sono codice, quindi controllarli è semanticamente diverso e IMO rubocop dovrebbe trattarlo in questo modo.
phoet

2
I commenti fanno parte del codice e quando gestisci il codice tramite posta elettronica o su un terminale. Penso che sia di cattivo gusto non avere i tuoi commenti aderenti alla stessa lunghezza di riga che è stata adottata dal "team" come codice. Non dovrebbero interrompere il flusso solo perché sono commenti. Sono sicuro che rubocop non controlla i commenti per niente, tranne le direttive, semanticamente (in modo significativo). Controlla la lunghezza della riga e lo stile dei commenti. Quindi no, non sta cercando un significato, sta solo controllando lo stile. Non sottovalutare il fatto che "i commenti non sono un codice" non deve esserlo.
vgoff

In effetti, anche la #!/bin/env rubyriga di commento è un commento, ma codice, ed è semanticamente importante. I commenti non sono sempre solo "commenti".
vgoff

1
@Twiek manca qualcosa a questa risposta che stai cercando?
vgoff

35

È possibile definire schemi regex per ignorare automaticamente determinate righe rubocop.yml, quindi puoi scegliere di ignorare tutte le righe che iniziano con un #carattere:

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

Questo potrebbe essere migliorato in modo che anche le righe di commento "rientrate" (cioè gli spazi seguiti da un #carattere) vengano ignorate, se è quello che vuoi.

Nota che questo non tiene conto delle righe di codice che terminano con un commento, però:

some_code(that_does_something) # This line would NOT be ignored by Rubocop.

9
Puoi espandere quella IgnorePatterns: ['(\A|\s)#']
espressione regolare

1
Grazie @poustovitss. C'è un errore di battitura: dovrebbe essere IgnoredPatternsinvece IgnorePatterns(manca la lettera "d").
Horacio

9

È possibile utilizzare il seguente commento con rubocop per ignorare una regola specifica:

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

Puoi anche ignorare interi file aggiungendoli a .rubocop.yml:

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

6

Penso che l'idea di base qui sia che vuoi applicare la lunghezza della riga, non importa cosa c'è dopo n caratteri. il valore predefinito a 80 caratteri è un culto del carico per le vecchie finestre di terminale che potevano contenere solo quel numero di caratteri. l'unica opzione che ho visto nel codice è un'opzione per consentire gli URL che potrebbero superare il limite di caratteri.

puoi ignorare interi file , immagino che non sia quello che stai cercando.


8
Oggigiorno, l'idea alla base degli 80 caratteri non è tanto un "culto del carico" per il terminale, c'è ancora una ragione logica: chiunque può dividere il proprio editor o le finestre IDE come preferisce, e purché siano solo più larghe di 80 caratteri, non avranno bisogno di cambiare la larghezza o di sperimentare la disposizione.
Jason Antman

2
IMO se non hai un IDE che supporta il soft wrapping, i tuoi strumenti non sono aggiornati.
phoet

8
Anche 80 caratteri sono abbastanza leggibili, mentre 40 o 200 sono meno, quindi è anche una questione di usabilità
Toni Leigh

# 1 "fintanto che sono solo più larghe di 80 caratteri" 800 x 600 è più largo di 80 caratteri e hai lo stesso problema di visualizzare due file di 80 caratteri affiancati. Questa è una sciocchezza e si applica solo a 1366 res. Con 1920+ che prendono il sopravvento, il prossimo argomento sarà "Posso dividere 3, 4 file"
Andre Figueiredo

1
lo avevamo a 80, poi lo abbiamo cambiato in 120. Guardare le PR durante la revisione del codice su GitHub in una visualizzazione a schermo diviso su laptop da 13 "è diventato un problema. Siamo tornati a 80.
AndreiMotinga
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.