Вимкнення Sonar для певного коду


164

Чи можна вимкнути вимірювання сонару ( www.sonarsource.org ) для конкретних блоків коду, який не хочеться вимірювати?

Прикладом є попередження "Зберегти слід стека", яке виводить Findbugs. Виходячи з сервера, я можу захотіти лише повернути повідомлення клієнту, не враховуючи фактичного винятку, який я щойно спіймав, якщо це виключення невідоме клієнту (тому що у клієнта немає JAR, у якому це виняток містився, наприклад).

Відповіді:


71

Це FAQ . Ви можете поставити //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
Посилання поширених запитань застаріло. Ось новий FAQ
wiredniko

11
Чи можете ви надати інше посилання на поширені запитання про SonarQube? Я бачу форму реєстрації замість FAQ
Win4ster

233

Ви можете коментувати клас або метод за допомогою SuppressWarnings

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

кальмар: S00112 в даному випадку є ідентифікатором проблеми Sonar. Ви можете знайти цей ідентифікатор в інтерфейсі Sonar. Перейдіть до випуску питань. Знайдіть проблему, про яку потрібно придушити попередження. У червоному полі випуску у вашому коді є посилання Правила з визначенням даної проблеми. Після натискання кнопки ви побачите ідентифікатор у верхній частині сторінки.


8
Я можу підтвердити, що це також працює з конкретним ідентифікатором правила FindBugs, наприклад @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
bcody

19
Проблема полягає в тому, що Eclipse видає попередження Unsupported @SuppressWarnings("squid:S00112"). Ви можете налаштувати Eclipse, щоб проігнорувати це, але тоді помилка друку, наприклад, in @SuppressWarnings("uncheckedd"), не буде виявлена.
Ортомала Локні

1
Дивіться docs.codescan.io/hc/en-us/articles/… щодо документів на @SuppressWarnings та Sonar.
Rich Dougherty

89

Рекомендую спробувати придушити конкретні попередження за допомогою @SuppressWarnings("squid:S2078").

Для придушення декількох попереджень ви можете це зробити так @SuppressWarnings({"squid:S2078", "squid:S2076"})

Є також //NOSONARкоментар, який наказує SonarQube ігнорувати всі помилки для певного рядка.

Нарешті, якщо у вас є належні права на користувальницький інтерфейс, ви можете видавати прапор як помилковий позитив безпосередньо з інтерфейсу.

Причина, через яку я рекомендую придушити конкретні попередження, полягає в тому, що краще застосовувати певну проблему, а не використовувати її //NOSONAR та ризикувати випадковою проблемою Sonar, що повзе у вашому коді.

Детальніше про це ви можете прочитати у FAQ

Примітка: Габор Бакос вказує на старіші FAQ, яким зараз 404. Це перший результат google для мене, тому я хочу допомогти іншим, у кого може виникнути те саме питання

Редагувати: 30.06.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 (SonarAnalyzer Java). pmdі checkstyleзнаходяться в інших сховищах правил.
Даніель К. Собрал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.