ปิด Sonar สำหรับรหัสบางอย่าง


164

เป็นไปได้ไหมที่จะปิดการตรวจวัดโซนาร์ ( www.sonarsource.org ) สำหรับบล็อกรหัสเฉพาะซึ่งไม่ต้องการวัดค่า

ตัวอย่างคือคำเตือน "Preserve Stack Trace" ซึ่ง Findbugs แสดงผล เมื่อออกจากเซิร์ฟเวอร์ฉันอาจต้องการส่งต่อข้อความกลับไปยังไคลเอนต์เท่านั้นไม่รวมถึงข้อยกเว้นจริงที่ฉันเพิ่งพบถ้าข้อยกเว้นนั้นไม่เป็นที่รู้จักกับลูกค้า (เนื่องจากไคลเอนต์ไม่มี JAR ที่ มีข้อยกเว้นเช่น)

คำตอบ:


71

นี่คือคำถามที่พบบ่อย คุณสามารถใส่//NOSONARบรรทัดที่เรียกเตือน ฉันชอบใช้กลไก FindBugs ซึ่งประกอบด้วยการเพิ่มคำอธิบายประกอบ @SuppressFBWarnings:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")

2
ตกลง อย่างไรก็ตามฉันไม่แน่ใจว่า Sonar ตีความอย่างถูกต้อง@SuppressFBWarnings(เพิ่มเพื่อหลีกเลี่ยงการปะทะกันjava.lang.SuppressWarnings) และไม่สนใจหรือไม่
Marcel Stör

AFAIK, Sonar ใช้ FindBugs ดังนั้นหาก FindBugs จัดการกับคำอธิบายประกอบเหล่านี้ฉันไม่เห็นว่าทำไมพวกเขาถึงไม่ทำงานเมื่อใช้ FindBugs ผ่าน Sonar ไม่ควรทดสอบอย่างหนัก
JB Nizet

4
ลิงก์คำถามที่พบบ่อยล้าสมัยแล้ว นี่คือคำถามที่พบบ่อย
wiredniko

11
คุณช่วยจัดหาลิงค์อื่น ๆ ให้กับคำถามที่พบบ่อยเกี่ยวกับ SonarQube ได้หรือไม่? ฉันเห็นฟอร์มเข้าสู่ระบบแทนคำถามที่พบบ่อย
Win4ster

234

คุณสามารถใส่คำอธิบายประกอบคลาสหรือวิธีการด้วย SuppressWarnings

@java.lang.SuppressWarnings("squid:S00112")

squid: S00112ในกรณีนี้คือรหัสปัญหา Sonar คุณสามารถค้นหา ID นี้ได้ใน Sonar UI ไปที่ปัญหาการเจาะลึก ค้นหาปัญหาที่คุณต้องการระงับการเตือน ในกล่องปัญหาสีแดงในรหัสของคุณจะมีลิงค์กฎพร้อมคำจำกัดความของปัญหาที่ระบุ เมื่อคุณคลิกที่คุณจะเห็นรหัสที่ด้านบนของหน้า


8
เราสามารถยืนยันได้ว่าเรื่องนี้ยังทำงานร่วมกับ FindBugs เฉพาะกฎ-ID @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE")เช่น
bcody

19
Unsupported @SuppressWarnings("squid:S00112")ปัญหาคือว่าคราสแสดงคำเตือน คุณสามารถกำหนดค่า Eclipse เพื่อข้ามสิ่งนี้ได้ แต่จากนั้นพิมพ์เช่นใน@SuppressWarnings("uncheckedd")จะไม่ถูกตรวจพบ
Ortomala Lokni

1
ดูdocs.codescan.io/hc/en-us/articles/…สำหรับเอกสารใน @SuppressWarnings and Sonar
Rich Dougherty

89

@SuppressWarnings("squid:S2078")ผมขอแนะนำให้คุณพยายามที่จะคำเตือนเฉพาะปราบโดยใช้

สำหรับการยับยั้งการเตือนหลาย ๆ ครั้งคุณสามารถทำได้เช่นนี้ @SuppressWarnings({"squid:S2078", "squid:S2076"})

นอกจากนี้ยังมี//NOSONARความคิดเห็นที่บอกให้ SonarQube ละเว้นข้อผิดพลาดทั้งหมดสำหรับบรรทัดที่ระบุ

ในที่สุดหากคุณมีสิทธิ์ที่เหมาะสมสำหรับส่วนต่อประสานผู้ใช้คุณสามารถออกค่าสถานะเป็นค่าบวกเท็จได้โดยตรงจากส่วนต่อประสาน

เหตุผลที่ฉันแนะนำให้ปราบปรามคำเตือนที่เฉพาะเจาะจงนั้นเป็นวิธีปฏิบัติที่ดีกว่าในการบล็อกปัญหาที่เฉพาะเจาะจงแทนที่จะใช้//NOSONARและเสี่ยงต่อปัญหา Sonar ที่กำลังคืบคลานเข้ามาในรหัสของคุณโดยไม่ได้ตั้งใจ

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

หมายเหตุ: Gábor Bakos กำลังชี้ไปที่คำถามที่พบบ่อยที่มีอายุมากกว่าซึ่งขณะนี้ 404s นี่เป็นผลลัพธ์ google ครั้งแรกสำหรับฉันดังนั้นฉันต้องการช่วยเหลือผู้อื่นที่อาจมีคำถามเดียวกัน

แก้ไข: 6/30/16 SonarQube ตอนนี้เรียกว่า SonarLint

ในกรณีที่คุณสงสัยว่าจะหาปลาหมึกได้อย่างไร เพียงคลิกที่ข้อความ Sonar (เช่นRemove this method to simply inherit it.) และปัญหา Sonar จะขยายออก

ที่ด้านล่างซ้ายจะมีหมายเลขปลาหมึก (เช่นsquid:S1185การบำรุงรักษา> การทำความเข้าใจ)

ดังนั้นคุณสามารถระงับได้โดย @SuppressWarnings("squid:S1185")


2
ขอบคุณสำหรับคำแนะนำในการเตือนลูกบาศก์โซนาร์หลายครั้ง
AlexWien

1
ปัญหาอื่นที่มีการทำเครื่องหมายว่าเป็นค่าบวกที่ผิดพลาดบนอินเทอร์เฟซคือถ้าไม่ว่าด้วยเหตุผลใดก็ตามที่โครงการถูกลบและเพิ่มอีกครั้งการตั้งค่าสถานะทั้งหมดที่คุณตั้งไว้จะหายไป
annedroiid

@annedroiid - มีวิธีใดบ้างถ้าทำได้เหมือนกันในไฟล์ pom.xml? ฉันตั้งคำถามได้ที่นี่: stackoverflow.com/questions/57789832/…
Pra_A

8

ใช้ // NOSONAR ในบรรทัดที่คุณได้รับการเตือนหากเป็นสิ่งที่คุณไม่สามารถช่วยให้รหัสของคุณ มันได้ผล!


4

ฉันไม่สามารถหาหมายเลขปลาหมึกในโซนาร์ 5.6 ด้วยคำอธิบายประกอบนี้ใช้งานได้:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})

1
squidใช้สำหรับฐานข้อมูล Java Sonar-sourced (SonarAnalyzer Java) pmdและcheckstyleอยู่ในที่เก็บกฎอื่น ๆ
Daniel C. Sobral
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.