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).

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")

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.


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")


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!


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"})

1
squiddotyczy bazy danych Java pochodzącej z Sonar (SonarAnalyzer Java). pmdi checkstyleznajdują się w innych repozytoriach reguł.
— Daniel C. Sobral
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.