Rubocop Linelength: Jak ignorować linie z komentarzami?


109

Korzystając z aplikacji Rails 4, chciałbym, aby Rubocop ignorował wiersze z komentarzami (tylko komentarz lub jakiś kod z komentarzem na końcu wiersza) podczas sprawdzania, czy linia jest za długa. Czy jest na to sposób?

Odpowiedzi:


198

Istnieje sposób na ignorowanie gliniarzy na podstawie linii.

Jest też sposób na zrobienie tego poprzez plik konfiguracyjny.

Uruchom, rubocop --auto-gen-configa wygeneruje plik, którego możesz użyć do wyłączenia przestępstw.

Polecenie daje również wskazówkę, co zrobić, aby załadować te opcje.

Dla każdego wiersza możesz także włączać i wyłączać gliniarzy.

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

Możesz także zastosować więcej niż jedną regułę naraz w swoim kodzie.

# rubocop:disable BlockComments, AsciiComments

Używając dyrektywy inline, staje się ona ważna tylko dla tego wiersza i wyglądałoby to tak:

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

Możesz przeczytać mnóstwo więcej o RuboCop w jego oficjalnej instrukcji .

Aby znaleźć wszystkie nazwy reguł, warto zajrzeć do plików konfiguracyjnych rubocop

Cyberwiz mówi - „uruchom, rubocop -Dkiedy potrzebuję nazw reguł, zamiast szukać w dokumentacji”. Aktualizacja : jest to teraz domyślne zachowanie bez flagi.


1
Cóż, komentarze mogą wyjaśniać odchylenie od stylu, który został zaakceptowany przez zespół, więc nie jest to zła rzecz, prawda? W przeciwnym razie umieścisz go w pliku rubocop.yml, a wtedy nie będzie to akceptowany wyjątek stylu i nie potrzebujesz komentarza. W komentarzu jest napisane „Chciałem to zrobić!”. Całkiem nieźle.
vgoff

1
komentarze nie są kodem, więc sprawdzanie ich jest semantycznie różne i rubocop IMO powinien to traktować w ten sposób.
phoet

2
Komentarze są częścią kodu i kiedy masz do czynienia z kodem w e-mailu lub na terminalu. Uważam, że to zły smak, aby Twoje komentarze nie były zgodne z taką samą długością linii, jaką przyjęła „drużyna” jako kod. Nie powinni zakłócać przepływu tylko dlatego, że są komentarzami. Jestem pewien, że rubocop nie sprawdza komentarzy pod kątem niczego poza dyrektywami, semantycznie (sensownie). Sprawdza długość linii i styl komentarzy. Więc nie, nie szuka znaczenia, tylko sprawdza styl. Nie przeceniaj tego, że „komentarze nie są kodem” nie muszą.
vgoff

Rzeczywiście, nawet #!/bin/env rubywiersz komentarza jest komentarzem, ale jest kodem i jest semantycznie ważny. Komentarze nie zawsze są tylko „komentarzami”.
vgoff

1
@Twiek czy w tej odpowiedzi brakuje czegoś, czego szukasz?
vgoff

35

Możliwe jest zdefiniowanie wzorców wyrażeń regularnych, aby automatycznie ignorować określone wiersze rubocop.yml, więc możesz wybrać ignorowanie wszystkich wierszy zaczynających się od #znaku:

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

Można to ulepszyć tak, aby "wcięte" wiersze komentarza (tj. Białe znaki, po których następuje #znak) były również ignorowane, jeśli tego chcesz.

Zwróć uwagę, że nie uwzględnia to linii kodu kończących się komentarzem:

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

9
Możesz rozszerzyć to IgnorePatterns: ['(\A|\s)#']
wyrażenie regularne, dodając

1
Dzięki @poustovitss. Jest literówka: IgnoredPatternszamiast tego powinno być IgnorePatterns(brakuje litery „d”).
Horacio,

9

Możesz użyć następującego komentarza z rubocopem, aby zignorować określoną regułę:

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

Możesz także zignorować całe pliki, dodając je do .rubocop.yml:

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

6

Myślę, że podstawową ideą jest to, że chcesz wymusić długość linii, bez względu na to, co jest po n znakach. Domyślnie 80 znaków jest kultowym ładunkiem dla starych okien terminali, które mogły przechowywać tylko taką liczbę znaków. jedyną opcją, jaką widziałem w kodzie, jest opcja zezwalająca na adresy URL, które mogą przekraczać limit znaków.

możesz zignorować całe pliki , myślę, że nie tego szukasz.


8
W dzisiejszych czasach idea 80 znaków nie jest tak bardzo „kultowym ładunkiem” dla terminala, wciąż istnieje logiczny powód: każdy może podzielić swój edytor lub okna IDE, jak chce, i pod warunkiem, że są one po prostu szersze niż 80 znaków, nie będą musieli zmieniać szerokości ani doświadczać zawijania.
Jason Antman

2
IMO Jeśli nie masz IDE obsługującego miękkie owijanie, twoje oprzyrządowanie nie jest aktualne.
phoet

8
80 znaków jest również całkiem czytelnych, podczas gdy 40 lub 200 jest mniej, więc jest to również kwestia użyteczności
Toni Leigh

# 1 "o ile są szersze niż 80 znaków" 800x600 jest szersze niż 80 znaków i masz ten sam problem z wyświetlaniem plików 2 80 znaków obok siebie. To nonsens i dotyczy tylko 1366 res. Po przejęciu 1920+ następnym argumentem będzie „Mogę podzielić 3, 4 pliki”
Andre Figueiredo,

1
mieliśmy 80, a potem zmieniliśmy na 120. Spojrzenie na PR podczas sprawdzania kodu na Githubie w widoku podzielonego ekranu na laptopach 13 "stało się problemem. Wróciliśmy do 80.
AndreiMotinga
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.