Rubocop Linelength: Bagaimana cara mengabaikan baris dengan komentar?

109

Menggunakan aplikasi Rails 4, saya ingin Rubocop mengabaikan baris dengan komentar (hanya komentar atau beberapa kode dengan akhir baris komentar) saat memeriksa apakah baris terlalu panjang. Apakah ada cara untuk melakukan ini?

Twiek
sumber

Jawaban:

198

Ada cara untuk mengabaikan polisi per baris.

Ada juga cara melakukannya melalui file konfigurasi.

Jalankan rubocop --auto-gen-configdan itu akan menghasilkan file yang dapat Anda gunakan untuk menonaktifkan pelanggaran.

Perintah tersebut juga memberikan petunjuk tentang apa yang harus dilakukan untuk memuat opsi tersebut.

Pada basis baris per baris, Anda dapat mengaktifkan dan menonaktifkan polisi juga.

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

Anda juga dapat melakukan lebih dari satu aturan sekaligus di kode Anda.

# rubocop:disable BlockComments, AsciiComments

Dengan menggunakan inline directive, perintah tersebut menjadi hanya valid untuk baris tersebut, dan akan terlihat seperti ini:

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

Anda dapat membaca lebih banyak tentang RuboCop di manual resminya .

Untuk menemukan semua nama aturan yang layak dicari di file konfigurasi rubocop

cyberwiz mengatakan - "jalankan rubocop -Dsaat saya membutuhkan nama aturan daripada melihat di dokumentasi." Pembaruan : Sekarang ini adalah perilaku default tanpa bendera.

vgoff
sumber
1
Nah, komentar tersebut mungkin menjelaskan penyimpangan dari gaya yang selama ini diterima oleh tim, jadi ini bukan hal yang buruk, bukan? Jika tidak, Anda menempatkannya di file rubocop.yml, dan itu bukan pengecualian gaya yang diterima, dan tidak memerlukan komentar. Komentar tersebut mengatakan "Saya bermaksud melakukan itu!". Bukan hal yang buruk sama sekali.
vgoff
1
komentar bukanlah kode, jadi memeriksanya berbeda secara semantik dan IMO rubocop harus memperlakukannya seperti itu.
phoet
2
Komentar adalah bagian dari kode, dan ketika Anda menangani kode di email atau di terminal. Menurut saya, rasanya tidak enak jika komentar Anda tidak mematuhi panjang baris yang sama yang telah diadopsi oleh "tim" sebagai kode. Mereka seharusnya tidak mengganggu alur hanya karena mereka berkomentar. Saya yakin rubocop tidak memeriksa komentar untuk apa pun, selain arahan, secara semantik (bermakna). Itu memeriksa panjang baris dan gaya komentar. Jadi tidak, itu tidak mencari arti, itu hanya memeriksa gaya. Jangan mengabaikan bahwa "komentar bukanlah kode" tidak harus seperti itu.
vgoff
Memang, bahkan #!/bin/env rubybaris komentar adalah komentar, namun kode, dan secara semantik penting. Komentar tidak selalu hanya "komentar".
vgoff
1
@Twiek apakah ada yang kurang dari jawaban ini yang Anda cari?
vgoff
35

Anda dapat menentukan pola regex untuk mengabaikan baris tertentu secara otomatis rubocop.yml, sehingga Anda dapat memilih untuk mengabaikan semua baris yang dimulai dengan #karakter:

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

Ini bisa diperbaiki sehingga baris komentar "menjorok" (yaitu spasi yang diikuti oleh #karakter) juga diabaikan, jika itu yang Anda inginkan.

Perhatikan bahwa ini tidak memperhitungkan baris kode yang diakhiri dengan komentar:

some_code(that_does_something) # This line would NOT be ignored by Rubocop.
GoBusto
sumber
9
Anda dapat memperluas ekspresi reguler itu dengan menyertakan baris yang dapat memiliki spasi putih:IgnorePatterns: ['(\A|\s)#']
poustovitss
1
Terima kasih @poustovitss. Ada salah ketik: itu harus IgnoredPatternsbukan IgnorePatterns(itu hilang huruf 'd').
Horacio
9

Anda dapat menggunakan komentar berikut dengan rubocop untuk mengabaikan aturan tertentu:

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

Anda juga dapat mengabaikan seluruh file dengan menambahkannya ke .rubocop.yml:

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

sumber
6

Saya pikir ide dasarnya di sini adalah Anda ingin memaksakan panjang baris, tidak peduli apa setelah karakter n. default ke 80 karakter adalah beberapa kultus kargo untuk jendela terminal lama yang hanya dapat menampung sejumlah karakter itu. satu-satunya opsi yang saya lihat di kode adalah opsi untuk mengizinkan url yang mungkin melebihi batas karakter.

Anda dapat mengabaikan seluruh file , saya rasa itu bukan yang Anda cari.

phoet
sumber
8
Saat ini, ide di balik 80 karakter bukanlah "kultus kargo" untuk terminal, masih ada alasan logis untuk itu: siapa pun dapat membagi editor atau jendela IDE mereka sesuka mereka, dan selama mereka hanya lebih lebar dari 80 karakter, mereka tidak perlu mengubah lebar atau mengalami pembungkusan.
Jason Antman
2
IMO jika Anda tidak memiliki IDE yang mendukung pembungkusan lunak, perkakas Anda tidak mutakhir.
phoet
8
80 karakter juga cukup mudah dibaca, sedangkan 40 atau 200 kurang begitu, jadi ini juga hal kegunaan
Toni Leigh
# 1 "asalkan lebih lebar dari 80 karakter" 800x600 lebih lebar dari 80 karakter, dan Anda memiliki masalah yang sama untuk melihat file 2 80 karakter berdampingan. Ini tidak masuk akal dan hanya berlaku untuk 1366 res. Dengan mengambil alih 1920+, argumen berikutnya adalah "Saya dapat membagi 3, 4 file"
Andre Figueiredo
1
kami memilikinya di 80, lalu mengubahnya menjadi 120. Melihat PR saat melakukan peninjauan kode di Github dalam tampilan layar terbagi pada laptop 13 "menjadi masalah. kami beralih kembali ke 80.
AndreiMotinga