Wyłączanie sonaru dla określonego kodu

164

Czy można wyłączyć pomiary sonarem ( www.sonarsource.org ) dla określonych bloków kodu, których nie chce się mierzyć?

Przykładem jest ostrzeżenie „Zachowaj śledzenie stosu”, które generuje Findbugs. Opuszczając serwer, mógłbym chcieć tylko przekazać wiadomość z powrotem do klienta, nie uwzględniając rzeczywistego wyjątku, który właśnie złapałem, jeśli ten wyjątek nie jest klientowi (ponieważ klient nie ma pliku JAR, w którym to na przykład wyjątek).

Ant Kutschera
źródło

Odpowiedzi:

71

To jest FAQ . Możesz włączyć //NOSONARlinię wyzwalającą ostrzeżenie. Wolę jednak używać mechanizmu FindBugs, polegającego na dodaniu adnotacji @SuppressFBWarnings:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")
JB Nizet
źródło
2
Zgoda. Nie jestem jednak pewien, czy Sonar poprawnie interpretuje @SuppressFBWarnings(dodaje, aby uniknąć kolizji java.lang.SuppressWarnings), a także go ignoruje.
Marcel Stör
AFAIK, Sonar używa FindBugs. Więc jeśli FindBugs obsługuje te adnotacje, nie rozumiem, dlaczego nie działałyby podczas uruchamiania FindBugs przez Sonar. I tak nie powinno być trudne do przetestowania.
JB Nizet,
4
Link do FAQ jest nieaktualny. Oto nowe FAQ
wiredniko
11
Czy możesz podać inne łącze do często zadawanych pytań dotyczących SonarQube? Zamiast FAQ widzę formularz logowania
Win4ster
233

Możesz dodać adnotację do klasy lub metody za pomocą SuppressWarnings

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

squid: S00112 w tym przypadku jest identyfikatorem wydania sonaru. Możesz znaleźć ten identyfikator w interfejsie użytkownika Sonar. Przejdź do analizy problemów. Znajdź problem, dla którego chcesz pominąć ostrzeżenia. W czerwonym polu numeru w Twoim kodzie znajduje się link do reguły z definicją danego problemu. Po kliknięciu zobaczysz identyfikator u góry strony.

maestr0
źródło
8
Mogę potwierdzić, że działa to również z określonym identyfikatorem reguły FindBugs, np @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
bcody
19
Problem polega na tym, że Eclipse wyświetla ostrzeżenie Unsupported @SuppressWarnings("squid:S00112"). Możesz skonfigurować Eclipse, aby to ignorował, ale wtedy literówka, taka jak in @SuppressWarnings("uncheckedd"), nie zostanie wykryta.
Ortomala Lokni
1
Zobacz docs.codescan.io/hc/en-us/articles/…, aby uzyskać dokumenty dotyczące @SuppressWarnings i Sonar.
Rich Dougherty
89

Zalecam spróbować stłumić określone ostrzeżenia za pomocą @SuppressWarnings("squid:S2078").

Aby wyłączyć wiele ostrzeżeń, możesz to zrobić w ten sposób @SuppressWarnings({"squid:S2078", "squid:S2076"})

Istnieje również //NOSONARkomentarz, który mówi SonarQube, aby ignorował wszystkie błędy dla określonej linii.

Wreszcie, jeśli masz odpowiednie uprawnienia do interfejsu użytkownika, możesz wysłać flagę jako fałszywy alarm bezpośrednio z interfejsu.

Powodem, dla którego zalecam pomijanie określonych ostrzeżeń, jest to, że lepszą praktyką jest blokowanie określonego problemu zamiast używania //NOSONARi ryzyka przypadkowego wkradnięcia się problemu z Sonarem do kodu.

Możesz przeczytać więcej na ten temat w FAQ

Uwaga: Gábor Bakos wskazuje na starsze FAQ, które teraz są 404. To jest pierwszy wynik w Google, więc chcę pomóc każdemu, kto może mieć to samo pytanie

Edycja: 6/30/16 SonarQube nazywa się teraz SonarLint

Jeśli zastanawiasz się, jak znaleźć numer kałamarnicy. Wystarczy kliknąć wiadomość Sonar (np. Remove this method to simply inherit it.), A problem z sonarem się rozwinie.

W lewym dolnym rogu będzie miał numer kałamarnicy (np. squid:S1185Konserwowalność> Zrozumiałość)

Więc możesz to stłumić przez @SuppressWarnings("squid:S1185")

wiredniko
źródło
2
Dzięki za podpowiedź dotyczącą wielu ostrzeżeń dotyczących kostki sonaru
AlexWien
1
Innym problemem związanym z oznaczeniem go jako fałszywie dodatniego w interfejsie jest to, że jeśli z jakiegoś powodu projekt zostanie usunięty i dodany ponownie, wszystkie ustawione flagi znikną.
annedroiid
@annedroiid - Czy jest jakiś sposób, jeśli to samo można zrobić w pliku pom.xml?
Zadałem
8

Użyj // NOSONAR w linii, w której otrzymasz ostrzeżenie, jeśli jest to coś, w czym nie możesz pomóc swojemu kodowi. To działa!

Jain
źródło
4

Nie mogę znaleźć numeru kałamarnicy w sonarze 5.6, przy czym ta adnotacja również działa:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})
Noker
źródło
1
squiddotyczy bazy danych Java pochodzącej z Sonar (SonarAnalyzer Java). pmdi checkstyleznajdują się w innych repozytoriach reguł.
Daniel C. Sobral