Rubocop Linelength: Yorumlu satırlar nasıl göz ardı edilir?


109

Bir Rails 4 uygulaması kullanarak Rubocop'un, bir satırın uzun olup olmadığını kontrol ederken yorum içeren satırları (sadece bir yorum veya satır sonu yorumu olan bazı kodlar) yok saymasını istiyorum. Bunu yapmanın bir yolu var mı?

Yanıtlar:


198

Hat başına polisleri görmezden gelmenin bir yolu var.

Yapılandırma dosyası aracılığıyla bunu yapmanın bir yolu da var.

Çalıştırın rubocop --auto-gen-configve suçları devre dışı bırakmak için kullanabileceğiniz bir dosya oluşturacaktır.

Komut ayrıca bu seçenekleri yüklemek için ne yapılması gerektiği konusunda bir ipucu verir.

Hat başına hat temelinde, polisleri de etkinleştirebilir ve devre dışı bırakabilirsiniz.

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

Ayrıca kodunuzda bir seferde birden fazla kural yapabilirsiniz.

# rubocop:disable BlockComments, AsciiComments

Bir satır içi yönerge kullanıldığında, yönerge yalnızca o satır için geçerli olur ve şöyle görünür:

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

Resmi kılavuzunda RuboCop hakkında bir ton daha okuyabilirsiniz .

Rubocop yapılandırma dosyalarında bakmaya değer tüm kural isimlerini bulmak için

cyberwiz diyor ki - " rubocop -Dbelgelere bakmak yerine kural adlarına ihtiyacım olduğunda çalıştır ." Güncelleme : Bu, artık işaretsiz varsayılan davranıştır.


1
Peki, yorumlar takım tarafından kabul edilen bir tarzdan sapmayı açıklayabilir, bu yüzden bu kötü bir şey değil, değil mi? Aksi takdirde, onu rubocop.yml dosyasına yerleştirirsiniz ve o zaman bu kabul edilen bir stil istisnası değildir ve bir yoruma ihtiyaç duymaz. Yorumda "Bunu yapmak istedim!" Yazıyor. Hiç de kötü bir şey değil.
vgoff

1
yorumlar kod değildir, bu yüzden onları kontrol etmek anlamsal olarak farklıdır ve IMO rubocop bunu bu şekilde ele almalıdır.
phoet

2
Yorumlar, kodun bir parçasıdır ve e-postada veya terminalde kodla uğraşırken. Yorumlarınızın kod olarak "ekip" tarafından benimsenen aynı satır uzunluklarına uymamasının kötü bir zevk olduğunu düşünüyorum. Sırf yorum oldukları için akışı bozmamalılar. Eminim rubocop anlamsal olarak (anlamlı olarak) yönergeler dışında yorumları hiçbir şey için kontrol etmez. Satır uzunluğunu ve yorum stilini kontrol eder. Yani hayır, anlam arıyor değil, sadece tarzı kontrol ediyor. "Yorumların kod olmadığını" indirmeyin.
vgoff

Aslında, #!/bin/env rubyyorum satırı bile bir yorumdur, ancak koddur ve anlamsal olarak önemlidir. Yorumlar her zaman sadece "yorumlar" değildir.
vgoff

1
@Twiek aradığınız bu cevapta eksik olan bir şey var mı?
vgoff

35

Belirli satırları otomatik olarak yok saymak için normal ifade desenleri tanımlamak mümkündür rubocop.yml, böylece bir #karakterle başlayan tüm satırları yoksaymayı seçebilirsiniz :

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

#İstediğiniz buysa , "girintili" yorum satırlarının (yani bir karakterin ardından gelen beyaz boşluk ) da göz ardı edilmesi için bu iyileştirilebilir .

Bununla birlikte, bunun bir yorumla biten kod satırlarını hesaba katmadığını unutmayın :

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

9
IgnorePatterns: ['(\A|\s)#']
Beyaz

1
Teşekkürler @poustovitss. Bir yazım hatası var: onun IgnoredPatternsyerine olmalı IgnorePatterns('d' harfi eksik).
Horacio

9

Belirli bir kuralı yok saymak için rubocop ile aşağıdaki yorumu kullanabilirsiniz:

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

Ayrıca şunlara ekleyerek tüm dosyaları yok sayabilirsiniz .rubocop.yml:

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

6

Sanırım buradaki temel fikir, n karakterden sonra ne olursa olsun, satır uzunluğunu zorlamak istemenizdir. 80 karakter varsayılanı, yalnızca bu sayıda karakteri tutabilen eski terminal pencereleri için bazı kargo kültüdür. i gördüğünü tek seçenek kodunda karakter sınırını aşabilir URL'ler izin vermek bir seçenektir.

yapabilecekleriniz bütün dosyaları görmezden , ben bu Aradığınız bu değil sanırım.


8
Bu günlerde, 80 karakterin ardındaki fikir terminal için çok fazla "kargo kültü" değil, bunun hala mantıklı bir nedeni var: herkes editörünü veya IDE pencerelerini istediği şekilde ve daha geniş oldukları sürece bölebilir 80 karakterden fazla ise, genişliği değiştirmeleri veya kaydırmayı deneyimlemeleri gerekmeyecek.
Jason Antman

2
IMO Yumuşak sarmayı destekleyen bir IDE'niz yoksa, takımlarınız güncel değildir.
phoet

8
80 karakter de oldukça okunabilir, ancak 40 veya 200 daha azdır, bu yüzden aynı zamanda kullanılabilirlik meselesi
Toni Leigh

# 1 "80 karakterden daha geniş oldukları sürece" 800x600, 80 karakterden daha geniştir ve 2 80 karakterli dosyayı yan yana görüntülerken aynı sorunla karşılaşıyorsunuz. Bu saçma ve yalnızca 1366 res için geçerlidir. 1920+ devraldığında, bir sonraki tartışma "3, 4 dosyayı bölebilirim" olacak
Andre Figueiredo

1
80'de aldık, sonra 120 olarak değiştirdik. 13 "dizüstü bilgisayarlarda bölünmüş ekran görünümünde
Github'da
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.