Rubocop Linelength: Wie ignoriere ich Zeilen mit Kommentaren?

109

Mit einer Rails 4-App möchte ich, dass Rubocop Zeilen mit Kommentaren (nur einen Kommentar oder einen Code mit einem Zeilenende-Kommentar) ignoriert, wenn überprüft wird, ob eine Zeile zu lang ist. Gibt es eine Möglichkeit, dies zu tun?

Twiek
quelle

Antworten:

197

Es gibt eine Möglichkeit, Polizisten pro Zeile zu ignorieren.

Es gibt auch eine Möglichkeit, dies über die Konfigurationsdatei zu tun.

Führen Sie es aus rubocop --auto-gen-configund es wird eine Datei generiert, mit der Sie die Verstöße deaktivieren können.

Der Befehl gibt auch einen Hinweis darauf, wie diese Optionen geladen werden müssen.

Zeile für Zeile können Sie auch die Polizei aktivieren und deaktivieren.

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

Sie können in Ihrem Code auch mehrere Regeln gleichzeitig ausführen.

# rubocop:disable BlockComments, AsciiComments

Wenn Sie eine Inline-Direktive verwenden, wird die Direktive nur für diese Zeile gültig und sieht folgendermaßen aus:

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

Sie können eine Menge mehr über RuboCop in seinem offiziellen Handbuch lesen .

Um alle Regelnamen zu finden, sollten Sie in den Rubocop-Konfigurationsdateien nachsehen

Cyberwiz sagt: "Führen Sie aus, rubocop -Dwenn ich die Regelnamen benötige, anstatt in der Dokumentation nachzuschauen ." Update : Dies ist jetzt das Standardverhalten ohne Flag.

vgoff
quelle
1
Nun, die Kommentare könnten die Abweichung von einem Stil erklären, der vom Team akzeptiert wurde. Das ist also keine schlechte Sache, oder? Andernfalls platzieren Sie es in der Datei rubocop.yml, und dann ist es keine akzeptierte Stilausnahme und benötigt keinen Kommentar. Der Kommentar sagt "Ich wollte das tun!". Gar keine schlechte Sache.
VGoff
1
Kommentare sind kein Code, daher ist die Überprüfung semantisch unterschiedlich, und IMO Rubocop sollte dies so behandeln.
Phoet
2
Kommentare sind Teil des Codes und wenn Sie sich mit Code per E-Mail oder auf einem Terminal befassen. Ich denke, es ist geschmacklos, wenn Ihre Kommentare nicht die gleichen Zeilenlängen einhalten, die "das Team" als Code übernommen hat. Sie sollten den Fluss nicht stören, nur weil sie Kommentare sind. Ich bin sicher, dass rubocop Kommentare nicht semantisch (sinnvoll) auf etwas anderes als Direktiven überprüft. Es überprüft die Zeilenlänge und den Stil der Kommentare. Also nein, es sucht nicht nach Sinn, es überprüft nur den Stil. Diskontieren Sie nicht, dass "Kommentare kein Code sind" nicht sein muss.
Vgoff
In der Tat ist sogar die #!/bin/env rubyKommentarzeile ein Kommentar und dennoch ein Code und semantisch wichtig. Kommentare sind nicht immer nur "Kommentare".
VGoff
1
@ Twiek Fehlt in dieser Antwort etwas, das Sie suchen?
VGoff
35

Es ist möglich, Regex-Muster zu definieren, um bestimmte Zeilen in automatisch zu ignorieren. rubocop.ymlSie können also alle Zeilen ignorieren, die mit einem #Zeichen beginnen:

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

Dies könnte verbessert werden, so dass "eingerückte" Kommentarzeilen (dh Leerzeichen gefolgt von einem #Zeichen) ebenfalls ignoriert werden, wenn Sie dies wünschen.

Beachten Sie, dass dies keine Codezeilen berücksichtigt, die mit einem Kommentar enden :

some_code(that_does_something) # This line would NOT be ignored by Rubocop.
GoBusto
quelle
9
Sie können diesen regulären Ausdruck erweitern, indem Sie Zeilen einschließen, die Leerzeichen enthalten können:IgnorePatterns: ['(\A|\s)#']
poustovitss
1
Danke @poustovitss. Es gibt einen Tippfehler: Es sollte IgnoredPatternsstattdessen sein IgnorePatterns(es fehlt der Buchstabe 'd').
Horacio
9

Mit rubocop können Sie den folgenden Kommentar verwenden, um eine bestimmte Regel zu ignorieren:

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

Sie können auch ganze Dateien ignorieren, indem Sie sie hinzufügen zu .rubocop.yml:

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

quelle
6

Ich denke, die Grundidee hier ist, dass Sie die Zeilenlänge erzwingen möchten, egal was nach n Zeichen steht. Die Standardeinstellung von 80 Zeichen ist ein Frachtkult für alte Terminalfenster, die nur diese Anzahl von Zeichen enthalten können. Die einzige Option, die ich im Code gesehen habe, ist eine Option, um URLs zuzulassen, die die Zeichenbeschränkung überschreiten könnten.

Sie können ganze Dateien ignorieren , ich denke, das ist nicht das, wonach Sie suchen.

Phoet
quelle
8
Heutzutage ist die Idee hinter 80 Zeichen nicht so sehr "Frachtkult" für das Terminal, es gibt immer noch einen logischen Grund dafür: Jeder kann seine Editor- oder IDE-Fenster teilen, wie er will und solange sie nur breiter sind Bei mehr als 80 Zeichen müssen sie weder die Breite ändern noch das Umbrechen erfahren.
Jason Antman
2
IMO Wenn Sie keine IDE haben, die Soft Wrapping unterstützt, sind Ihre Werkzeuge nicht auf dem neuesten Stand.
Phoet
8
80 Zeichen sind auch ziemlich lesbar, während 40 oder 200 weniger sind, so ist es auch eine Usability-Sache
Toni Leigh
# 1 "Solange sie nur breiter als 80 Zeichen sind" 800x600 ist breiter als 80 Zeichen, und Sie haben das gleiche Problem beim Anzeigen von 2 80-Zeichen-Dateien nebeneinander. Dies ist Unsinn und gilt nur für 1366 res. Mit der Übernahme von 1920+ wird das nächste Argument "Ich kann 3, 4 Dateien teilen" sein
Andre Figueiredo
1
Wir hatten es bei 80 und änderten es dann auf 120. Das Betrachten von PRs während der Codeüberprüfung auf Github in einer geteilten Bildschirmansicht auf 13-
Zoll-