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.