Rubocop Linelength: จะเพิกเฉยต่อความคิดเห็นได้อย่างไร?


110

การใช้แอพ Rails 4 ฉันต้องการให้ Rubocop ละเว้นบรรทัดที่มีความคิดเห็น (เป็นเพียงความคิดเห็นหรือโค้ดบางส่วนที่มีความคิดเห็นท้ายบรรทัด) เมื่อตรวจสอบว่าบรรทัดยาวหรือไม่ มีวิธีทำไหม?

คำตอบ:


200

มีวิธีที่จะละเว้นตำรวจตามบรรทัด

นอกจากนี้ยังมีวิธีการทำผ่านไฟล์กำหนดค่า

วิ่ง rubocop --auto-gen-configและจะสร้างไฟล์ที่คุณสามารถใช้ปิดการกระทำผิด

คำสั่งยังให้คำแนะนำเกี่ยวกับสิ่งที่ต้องทำเพื่อโหลดตัวเลือกเหล่านั้น

ในบรรทัดต่อบรรทัดคุณสามารถเปิดและปิดการใช้งานตำรวจได้เช่นกัน

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

คุณยังสามารถทำมากกว่าหนึ่งกฎในรหัสของคุณในแต่ละครั้ง

# rubocop:disable BlockComments, AsciiComments

ด้วยการใช้คำสั่งแบบอินไลน์คำสั่งจะใช้ได้กับบรรทัดนั้นเท่านั้นและจะมีลักษณะดังนี้:

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

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ RuboCop ได้ในคู่มืออย่างเป็นทางการคู่มืออย่างเป็นทางการ

หากต้องการค้นหาชื่อกฎทั้งหมดควรดูในไฟล์กำหนดค่า rubocop

ไซเบอร์วิซกล่าวว่า - "เรียกใช้rubocop -Dเมื่อฉันต้องการชื่อกฎแทนที่จะดูในเอกสารประกอบ" อัปเดต : ตอนนี้เป็นพฤติกรรมเริ่มต้นที่ไม่มีแฟล็ก


1
ความคิดเห็นอาจอธิบายถึงการเบี่ยงเบนจากรูปแบบที่ได้รับการยอมรับจากทีมงานดังนั้นนี่ไม่ใช่เรื่องเลวร้ายใช่ไหม? มิฉะนั้นคุณจะวางไว้ในไฟล์ rubocop.yml จากนั้นจะไม่ใช่ข้อยกเว้นรูปแบบที่ยอมรับและไม่ต้องการความคิดเห็น ความคิดเห็นระบุว่า "ฉันตั้งใจจะทำอย่างนั้น!" ไม่ใช่เรื่องเลวร้าย แต่อย่างใด
vgoff

1
ความคิดเห็นไม่ใช่รหัสดังนั้นการตรวจสอบความแตกต่างทางความหมายและ IMO rubocop ควรปฏิบัติเช่นนั้น
phoet

2
ความคิดเห็นเป็นส่วนหนึ่งของรหัสและเมื่อคุณจัดการกับรหัสในอีเมลหรือบนเครื่องปลายทาง ฉันคิดว่ามันเป็นรสชาติที่ไม่ดีที่จะไม่มีความคิดเห็นของคุณเป็นไปตามความยาวบรรทัดเดียวกับที่ "ทีม" นำมาใช้เป็นรหัส พวกเขาไม่ควรรบกวนการไหลเพียงเพราะเป็นความคิดเห็น ฉันแน่ใจว่า rubocop ไม่ได้ตรวจสอบความคิดเห็นใด ๆ นอกเหนือจากคำสั่งในเชิงความหมาย ตรวจสอบความยาวบรรทัดและรูปแบบของความคิดเห็น ดังนั้นไม่มันไม่ได้มองหาความหมาย แต่เป็นการตรวจสอบสไตล์เท่านั้น อย่าลดราคาที่ "ความคิดเห็นไม่ใช่รหัส" ไม่จำเป็นต้องเป็น
vgoff

อันที่จริงแม้แต่#!/bin/env rubyบรรทัดความคิดเห็นก็เป็นความคิดเห็น แต่ก็เป็นรหัสและมีความสำคัญทางความหมาย ความคิดเห็นไม่ได้มี แต่ "ความคิดเห็น" เสมอไป
vgoff

1
@ Twiek มีอะไรหายไปจากคำตอบนี้ที่คุณกำลังมองหา?
vgoff

35

เป็นไปได้ที่จะกำหนดรูปแบบ regex เพื่อละเว้นบางบรรทัดโดยอัตโนมัติrubocop.ymlดังนั้นคุณสามารถเลือกที่จะละเว้นบรรทัดทั้งหมดที่ขึ้นต้นด้วย#อักขระ:

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

สิ่งนี้สามารถปรับปรุงได้เพื่อให้บรรทัดความคิดเห็น "เยื้อง" (เช่นช่องว่างตามด้วย #อักขระ) จะถูกละเว้นหากนั่นคือสิ่งที่คุณต้องการ

โปรดทราบว่าสิ่งนี้ไม่ได้คำนึงถึงบรรทัดของรหัสที่ลงท้ายด้วยความคิดเห็นแม้ว่า:

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

9
คุณสามารถขยาย regexp นั้นโดยรวมบรรทัดที่มีช่องว่างได้:IgnorePatterns: ['(\A|\s)#']
poustovitss

1
ขอบคุณ @poustovitss มีการพิมพ์ผิด: ควรจะเป็นIgnoredPatternsแทนIgnorePatterns(ไม่มีตัวอักษร 'd')
Horacio

10

คุณสามารถใช้ความคิดเห็นต่อไปนี้กับ rubocop เพื่อละเว้นกฎเฉพาะ:

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

คุณยังสามารถละเว้นไฟล์ทั้งหมดได้โดยเพิ่มใน.rubocop.yml:

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

6

ฉันคิดว่าแนวคิดพื้นฐานตรงนี้คือคุณต้องการบังคับใช้ความยาวบรรทัดไม่ว่าอะไรจะอยู่หลัง n อักขระ ค่าดีฟอลต์คือ 80 อักขระคือลัทธิขนส่งสินค้าสำหรับหน้าต่างเทอร์มินัลเก่าที่สามารถเก็บอักขระจำนวนนั้น ตัวเลือกเดียวที่ฉันเห็นในรหัสคือตัวเลือกในการอนุญาต URL ที่อาจเกินขีด จำกัด อักขระ

คุณสามารถเพิกเฉยต่อไฟล์ทั้งหมดฉันเดาว่านั่นไม่ใช่สิ่งที่คุณกำลังมองหา


8
ทุกวันนี้แนวคิดที่อยู่เบื้องหลัง 80 ตัวอักษรไม่ใช่ "ลัทธิการขนส่งสินค้า" สำหรับเทอร์มินัลมากนัก แต่ยังมีเหตุผลที่สมเหตุสมผลนั่นคือทุกคนสามารถแยกตัวแก้ไขหรือหน้าต่าง IDE ได้ตามที่ต้องการและตราบใดที่มันกว้างขึ้น มากกว่า 80 อักขระพวกเขาไม่จำเป็นต้องเปลี่ยนความกว้างหรือสัมผัสกับการตัด
Jason Antman

2
IMO หากคุณไม่มี IDE ที่รองรับการห่อแบบอ่อนแสดงว่าเครื่องมือของคุณยังไม่ทันสมัย
phoet

8
80 ตัวอักษรก็อ่านได้สวยเช่นกันในขณะที่ 40 หรือ 200 นั้นน้อยกว่าดังนั้นจึงเป็นสิ่งที่ใช้งานได้เช่นกัน
Toni Leigh

# 1 "ตราบเท่าที่มีความกว้างมากกว่า 80 อักขระ" 800x600 กว้างกว่า 80 ตัวอักษรและคุณมีปัญหาในการดูไฟล์ 2 80 ตัวอักษรแบบเคียงข้างกัน นี่เป็นเรื่องไร้สาระและใช้กับความละเอียด 1366 เท่านั้น เมื่อปี 1920+ เข้ามาอาร์กิวเมนต์ถัดไปคือ "ฉันสามารถแบ่ง 3, 4 ไฟล์"
Andre Figueiredo

1
เรามีมันที่ 80 แล้วเปลี่ยนเป็น 120 การดู PR ในขณะที่ตรวจสอบโค้ดบน Github ในมุมมองแบบแยกหน้าจอบนแล็ปท็อปขนาด 13 นิ้วกลายเป็นปัญหาเราเปลี่ยนกลับไปเป็น 80
AndreiMotinga
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.