Mematikan Sonar untuk kode tertentu

164

Apakah mungkin untuk mematikan pengukuran sonar ( www.sonarsource.org ) untuk blok kode tertentu, yang mana yang tidak ingin diukur?

Contohnya adalah peringatan "Preserve Stack Trace" yang dihasilkan Findbugs. Ketika meninggalkan server, saya mungkin hanya ingin meneruskan pesan kembali ke klien, tidak termasuk pengecualian aktual yang baru saja saya tangkap, jika pengecualian itu tidak diketahui klien (karena klien tidak memiliki JAR di mana itu pengecualian terkandung misalnya).

Ant Kutschera
sumber

Jawaban:

71

Ini adalah FAQ . Anda dapat memasang //NOSONARsaluran yang memicu peringatan. Saya lebih suka menggunakan mekanisme FindBugs, yang terdiri dari menambahkan anotasi @SuppressFBWarnings:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")
JB Nizet
sumber
2
Sepakat. Namun, saya tidak yakin apakah Sonar benar mengartikan @SuppressFBWarnings(ditambahkan untuk menghindari bentrokan dengan java.lang.SuppressWarnings) dan juga mengabaikannya.
Marcel Stör
AFAIK, Sonar menggunakan FindBugs. Jadi jika FindBugs menangani anotasi ini, saya tidak melihat mengapa mereka tidak bekerja ketika menjalankan FindBugs melalui Sonar. Seharusnya tidak sulit untuk diuji.
JB Nizet
4
Tautan FAQ sudah usang. Inilah FAQ
wiredniko
11
Bisakah Anda memberikan tautan lain ke FAQ SonarQube? Saya melihat formulir login alih-alih FAQ
Win4ster
235

Anda bisa membuat anotasi kelas atau metode dengan SuppressWarnings

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

squid: S00112 dalam hal ini adalah ID masalah Sonar. Anda dapat menemukan ID ini di Sonar UI. Pergi ke Penelusuran Masalah. Temukan masalah yang ingin Anda tekan peringatannya. Di kotak masalah merah dalam kode Anda, ada tautan Aturan dengan definisi masalah yang diberikan. Setelah Anda mengklik itu Anda akan melihat ID di bagian atas halaman.

maestr0
sumber
8
Saya dapat mengonfirmasi bahwa ini juga berfungsi dengan ID-aturan FindBugs tertentu, mis @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
bcody
19
Masalahnya adalah Eclipse menampilkan peringatan Unsupported @SuppressWarnings("squid:S00112"). Anda dapat mengonfigurasi Eclipse untuk mengabaikan hal ini tetapi kesalahan ketik seperti dalam @SuppressWarnings("uncheckedd")tidak akan terdeteksi.
Ortomala Lokni
1
Lihat docs.codescan.io/hc/en-us/articles/… untuk dokumentasi di @SuppressWarnings dan Sonar.
Rich Dougherty
89

Saya sarankan Anda mencoba untuk menekan peringatan tertentu dengan menggunakan @SuppressWarnings("squid:S2078").

Untuk menekan beberapa peringatan, Anda dapat melakukannya seperti ini @SuppressWarnings({"squid:S2078", "squid:S2076"})

Ada juga //NOSONARkomentar yang memberitahu SonarQube untuk mengabaikan semua kesalahan untuk baris tertentu.

Terakhir, jika Anda memiliki hak yang tepat untuk antarmuka pengguna, Anda dapat mengeluarkan bendera sebagai positif palsu langsung dari antarmuka.

Alasan mengapa saya merekomendasikan penindasan terhadap peringatan tertentu adalah bahwa itu adalah praktik yang lebih baik untuk memblokir masalah tertentu daripada menggunakan //NOSONARdan berisiko masalah Sonar merayap dalam kode Anda secara tidak sengaja.

Anda dapat membaca lebih lanjut tentang ini di FAQ

Catatan: Gábor Bakos menunjuk ke FAQ yang lebih lama yang sekarang berusia 404-an. Ini adalah hasil google pertama bagi saya jadi saya ingin membantu orang lain yang mungkin memiliki pertanyaan yang sama

Sunting: 6/30/16 SonarQube sekarang disebut SonarLint

Jika Anda bertanya-tanya bagaimana menemukan nomor squid. Cukup klik pada pesan Sonar (mis. Remove this method to simply inherit it.) Dan masalah Sonar akan berkembang.

Di kiri bawah itu akan memiliki nomor squid (mis. squid:S1185Maintainability> Understandability)

Jadi Anda bisa menekannya dengan @SuppressWarnings("squid:S1185")

wiredniko
sumber
2
Terima kasih atas petunjuk untuk memasukkan beberapa peringatan sonar cube
AlexWien
1
Masalah lain dengan menandainya sebagai false positive pada antarmuka adalah bahwa jika karena alasan apa pun proyek dihapus dan ditambahkan lagi, semua flag yang telah Anda atur akan hilang.
annedroiid
@annedroiid - Apakah ada cara jika hal yang sama dapat dilakukan dalam file pom.xml? Saya telah mengajukan pertanyaan di sini: stackoverflow.com/questions/57789832/…
Pra_A
8

Gunakan // NOSONAR pada baris yang Anda dapatkan peringatan jika itu adalah sesuatu yang Anda tidak dapat membantu kode Anda. Berhasil!

Jain
sumber
4

Saya tidak dapat menemukan nomor squid di sonar 5.6, dengan penjelasan ini juga berfungsi:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})
Noker
sumber
1
squidadalah untuk database Java yang bersumber dari Sonar (SonarAnalyzer Java). pmddan checkstyleberada di repositori aturan lain.
Daniel C. Sobral