Disattivazione del sonar per un determinato codice


164

È possibile disattivare le misurazioni del sonar ( www.sonarsource.org ) per specifici blocchi di codice, che non si desidera misurare?

Un esempio è l'avviso "Mantieni traccia stack" che viene emesso da Findbugs. Quando esco dal server, potrei voler solo restituire il messaggio al client, esclusa l'eccezione effettiva che ho appena rilevato, se tale eccezione è sconosciuta al client (perché il client non ha il JAR in cui quello l'eccezione era contenuta per esempio).

Risposte:


71

Questa è una FAQ . Puoi mettere //NOSONARin linea innescando l'avvertimento. Preferisco usare il meccanismo FindBugs, che consiste nell'aggiungere l'annotazione @SuppressFBWarnings:

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

2
Concordato. Tuttavia, non sono sicuro che Sonar interpreta correttamente @SuppressFBWarnings(aggiunto per evitare scontri con java.lang.SuppressWarnings) e lo ignori.
Marcel Stör,

AFAIK, Sonar utilizza FindBugs. Quindi, se FindBugs gestisce queste annotazioni, non vedo perché non funzionerebbero durante l'esecuzione di FindBugs tramite Sonar. Non dovrebbe essere difficile testarlo comunque.
JB Nizet,

4
Il link FAQ è obsoleto. Ecco le nuove FAQ
wiredniko

11
Potresti fornire altri link alle FAQ su SonarQube? Vedo un modulo di accesso invece di FAQ
Win4ster

235

È possibile annotare una classe o un metodo con SuppressWarnings

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

calamaro: S00112 in questo caso è un ID problema Sonar. È possibile trovare questo ID nell'interfaccia utente del sonar. Vai al Problema Drilldown. Trova un problema per cui desideri eliminare gli avvisi. Nella casella rossa del codice è presente un collegamento Regola con una definizione di un determinato problema. Dopo aver fatto clic, vedrai l'ID nella parte superiore della pagina.


8
Posso confermare che funziona anche con un ID regola FindBugs specifico, ad es @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
bcody

19
Il problema è che Eclipse visualizza un avviso Unsupported @SuppressWarnings("squid:S00112"). È possibile configurare Eclipse per ignorarlo, ma @SuppressWarnings("uncheckedd")non verrà rilevato un errore di battitura come in .
Ortomala Lokni

1
Vedi docs.codescan.io/hc/en-us/articles/… per i documenti su @SuppressWarnings e Sonar.
Rich Dougherty,

89

Ti consiglio di provare a sopprimere gli avvisi specifici usando @SuppressWarnings("squid:S2078").

Per eliminare più avvisi è possibile farlo in questo modo @SuppressWarnings({"squid:S2078", "squid:S2076"})

C'è anche il //NOSONARcommento che dice a SonarQube di ignorare tutti gli errori per una riga specifica.

Infine, se si dispone dei diritti appropriati per l'interfaccia utente, è possibile emettere un flag come falso positivo direttamente dall'interfaccia.

Il motivo per cui raccomando la soppressione di avvisi specifici è che è una pratica migliore per bloccare un problema specifico invece di utilizzare //NOSONARe rischiare un problema Sonar che si insinua nel codice per errore.

Puoi leggere di più al riguardo nelle FAQ

Nota: Gábor Bakos sta indicando le FAQ più vecchie che ora sono 404. Questo è il primo risultato di Google per me, quindi desidero aiutare chiunque abbia la stessa domanda

Modifica: 30/06/16 SonarQube è ora chiamato SonarLint

Nel caso ti stia chiedendo come trovare il numero di calamari. Basta fare clic sul messaggio Sonar (es. Remove this method to simply inherit it.) E il problema del Sonar si espanderà.

In basso a sinistra avrà il numero di calamari (es. squid:S1185Manutenibilità> Comprensibilità)

Quindi puoi sopprimerlo @SuppressWarnings("squid:S1185")


2
Grazie per il suggerimento di inserire più avvisi del cubo sonar
AlexWien,

1
L'altro problema di contrassegnarlo come falso positivo sull'interfaccia è che se per qualsiasi motivo il progetto viene eliminato e aggiunto di nuovo, tutti i flag che hai impostato saranno spariti.
annedroiid,

@annedroiid - Esiste un modo se lo stesso può essere fatto nel file pom.xml? Ho domanda raise qui: stackoverflow.com/questions/57789832/...
Pra_A

8

Usa // NOSONAR sulla riga che ricevi un avviso se è qualcosa con cui non puoi aiutare il tuo codice. Funziona!


4

Non riesco a trovare il numero di calamari nel sonar 5.6, con questa annotazione funziona anche:

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

1
squidè per il database Java di origine Sonar (SonarAnalyzer Java). pmde checkstylesono su altri repository di regole.
Daniel C. Sobral,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.