Rubocop Linelength: Làm thế nào để bỏ qua các dòng có chú thích?


109

Sử dụng ứng dụng Rails 4, tôi muốn Rubocop bỏ qua các dòng có nhận xét (chỉ là một nhận xét hoặc một số mã có chú thích cuối dòng) khi kiểm tra xem một dòng có dài hay không. Có cách nào để làm việc này không?

Câu trả lời:


197

Có một cách để bỏ qua cảnh sát trên cơ sở mỗi dòng.

Ngoài ra còn có một cách để làm điều đó thông qua tệp cấu hình.

Chạy rubocop --auto-gen-configvà nó sẽ tạo ra một tệp mà bạn có thể sử dụng để vô hiệu hóa các hành vi vi phạm.

Lệnh này cũng đưa ra gợi ý về những việc cần làm để tải các tùy chọn đó.

Trên cơ sở từng dòng, bạn cũng có thể bật và tắt cảnh sát.

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

Bạn cũng có thể thực hiện nhiều quy tắc cùng một lúc trong mã của mình.

# rubocop:disable BlockComments, AsciiComments

Bằng cách sử dụng một chỉ thị nội tuyến, chỉ thị chỉ trở nên hợp lệ cho dòng đó và nó sẽ trông như thế này:

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

Bạn có thể đọc thêm nhiều điều về RuboCop trong sách hướng dẫn chính thức của nó .

Để tìm tất cả các tên quy tắc đáng xem trong tệp cấu hình rubocop

cyberwiz nói - "chạy rubocop -Dkhi tôi cần tên quy tắc hơn là tìm trong tài liệu." Cập nhật : Đây hiện là hành vi mặc định mà không có cờ.


1
Chà, những bình luận có thể giải thích cho sự sai lệch so với một phong cách đã được đội chấp nhận, vì vậy đây không phải là một điều xấu, phải không? Nếu không, bạn đặt nó vào tệp rubocop.yml và sau đó nó không phải là một ngoại lệ kiểu được chấp nhận và không cần nhận xét. Bình luận nói rằng "Tôi có ý định làm điều đó!". Không hề tệ một chút nào.
vgoff

1
nhận xét không phải là mã, vì vậy việc kiểm tra chúng khác nhau về ngữ nghĩa và IMO rubocop nên xử lý nó theo cách đó.
phoet

2
Nhận xét là một phần của mã và khi bạn xử lý mã trong e-mail hoặc trên thiết bị đầu cuối. Tôi nghĩ rằng thật tệ nếu không nhận xét của bạn tuân theo cùng độ dài dòng đã được "nhóm" chấp nhận làm mã. Chúng không nên làm gián đoạn luồng chỉ vì chúng là những bình luận. Tôi chắc chắn rằng rubocop không kiểm tra nhận xét cho bất kỳ điều gì, ngoài chỉ thị, về mặt ngữ nghĩa (có nghĩa). Nó kiểm tra độ dài dòng và kiểu bình luận. Vì vậy, không, nó không tìm kiếm ý nghĩa, nó chỉ kiểm tra phong cách. Đừng chiết khấu rằng "bình luận không phải là mã" không cần thiết.
vgoff

Thật vậy, ngay cả #!/bin/env rubydòng bình luận cũng là một bình luận, nhưng là mã, và rất quan trọng về mặt ngữ nghĩa. Nhận xét không phải lúc nào cũng chỉ là "nhận xét".
vgoff

1
@Twiek có điều gì còn thiếu trong câu trả lời này mà bạn đang tìm kiếm không?
vgoff

35

Có thể xác định các mẫu regex để tự động bỏ qua các dòng nhất định rubocop.yml, vì vậy bạn có thể chọn bỏ qua tất cả các dòng bắt đầu bằng một #ký tự:

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

Điều này có thể được cải thiện để các dòng nhận xét "thụt lề" (tức là khoảng trắng theo sau bởi một #ký tự) cũng bị bỏ qua, nếu đó là điều bạn muốn.

Xin lưu ý rằng điều này không giải thích cho các dòng mã kết thúc bằng nhận xét, mặc dù:

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

9
Bạn có thể mở rộng regexp rằng bằng cách bao gồm dây chuyền có thể có khoảng trắng:IgnorePatterns: ['(\A|\s)#']
poustovitss

1
Cảm ơn @poustovitss. Có một lỗi đánh máy: IgnoredPatternsthay vào đó, nó phải là IgnorePatterns(thiếu ký tự 'd').
Horacio

9

Bạn có thể sử dụng nhận xét sau với rubocop để bỏ qua một quy tắc cụ thể:

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

Bạn cũng có thể bỏ qua toàn bộ tệp bằng cách thêm chúng vào .rubocop.yml:

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

6

tôi nghĩ ý tưởng cơ bản ở đây là bạn muốn thực thi độ dài dòng, không có vấn đề gì sau n ký tự. mặc định là 80 ký tự là một số hàng hóa sùng bái đối với các cửa sổ đầu cuối cũ chỉ có thể chứa số ký tự đó. tùy chọn duy nhất mà tôi thấy trong mã là tùy chọn cho phép các url có thể vượt quá giới hạn ký tự.

bạn có thể bỏ qua toàn bộ tệp , tôi đoán đó không phải là thứ bạn đang tìm kiếm.


8
Ngày nay, ý tưởng đằng sau 80 ký tự không quá "sùng bái hàng hóa" đối với nhà ga, vẫn có một lý do hợp lý cho nó: bất kỳ ai cũng có thể chia nhỏ cửa sổ trình soạn thảo hoặc IDE của họ theo cách họ muốn và miễn là chúng rộng hơn hơn 80 ký tự, họ sẽ không cần thay đổi chiều rộng hoặc gói trải nghiệm.
Jason Antman

2
IMO nếu bạn không có IDE hỗ trợ gói mềm, công cụ của bạn không được cập nhật.
phoet 20/02/16

8
80 chars cũng khá dễ đọc, trong khi 40 hoặc 200 là ít như vậy, do đó, nó cũng là một điều khả năng sử dụng
Toni Leigh

# 1 "miễn là chúng chỉ rộng hơn 80 ký tự" 800x600 rộng hơn 80 ký tự và bạn gặp vấn đề tương tự khi xem 2 tệp 80 ký tự song song. Điều này là vô nghĩa và chỉ áp dụng cho 1366 res. Với 1920+ tiếp quản, đối số tiếp theo sẽ là "Tôi có thể chia 3, 4 tệp"
Andre Figueedlyo

1
chúng tôi đã có nó ở 80, sau đó thay đổi nó để 120. Nhìn vào xem xét mã trong khi làm PR trên Github trong một cái nhìn chia màn hình trên 13" máy tính xách tay đã trở thành một vấn đề chúng tôi chuyển trở lại 80..
AndreiMotinga
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.