Désactiver le sondeur pour certains codes

164

Est-il possible de désactiver les mesures du sondeur ( www.sonarsource.org ) pour des blocs de code spécifiques, que l'on ne souhaite pas mesurer?

Un exemple est l'avertissement «Preserve Stack Trace» émis par Findbugs. En quittant le serveur, je pourrais bien vouloir renvoyer uniquement le message au client, sans inclure l'exception réelle que je viens de capturer, si cette exception est inconnue du client (car le client n'a pas le JAR dans lequel ce exception était contenue par exemple).

Fourmi Kutschera
la source

Réponses:

71

Ceci est une FAQ . Vous pouvez mettre //NOSONARsur la ligne déclenchant l'avertissement. Je préfère cependant utiliser le mécanisme FindBugs, qui consiste à ajouter l'annotation @SuppressFBWarnings:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")
JB Nizet
la source
2
D'accord. Cependant, je ne suis pas sûr que Sonar interprète correctement @SuppressFBWarnings(ajouté pour éviter les conflits avec java.lang.SuppressWarnings) et l'ignore également.
Marcel Stör
AFAIK, Sonar utilise FindBugs. Donc, si FindBugs gère ces annotations, je ne vois pas pourquoi elles ne fonctionneraient pas lors de l'exécution de FindBugs via Sonar. De toute façon, cela ne devrait pas être difficile à tester.
JB Nizet
4
Le lien FAQ est obsolète. Voici la nouvelle FAQ
wiredniko
11
Pourriez-vous s'il vous plaît fournir un autre lien vers une FAQ SonarQube? Je vois un formulaire de connexion au lieu de FAQ
Win4ster
235

Vous pouvez annoter une classe ou une méthode avec SuppressWarnings

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

squid: S00112 dans ce cas est un ID de problème Sonar. Vous pouvez trouver cet identifiant dans l'interface utilisateur du sondeur. Accédez à l'analyse des problèmes. Recherchez un problème pour lequel vous souhaitez supprimer les avertissements. Dans la zone de problème rouge de votre code se trouve un lien de règle avec une définition d'un problème donné. Une fois que vous avez cliqué dessus, vous verrez l'ID en haut de la page.

maestr0
la source
8
Je peux confirmer que cela fonctionne également avec un ID de règle FindBugs spécifique, par exemple @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
bcody
19
Le problème est qu'Eclipse affiche un avertissement Unsupported @SuppressWarnings("squid:S00112"). Vous pouvez configurer Eclipse pour l'ignorer, mais une faute de frappe telle que dans @SuppressWarnings("uncheckedd")ne sera pas détectée.
Ortomala Lokni
1
Voir docs.codescan.io/hc/en-us/articles/… pour obtenir des documents sur @SuppressWarnings et Sonar.
Rich Dougherty
89

Je vous recommande d'essayer de supprimer des avertissements spécifiques en utilisant @SuppressWarnings("squid:S2078").

Pour supprimer plusieurs avertissements, vous pouvez le faire comme ceci @SuppressWarnings({"squid:S2078", "squid:S2076"})

Il y a aussi le //NOSONARcommentaire qui dit à SonarQube d'ignorer toutes les erreurs pour une ligne spécifique.

Enfin, si vous disposez des droits appropriés pour l'interface utilisateur, vous pouvez émettre un drapeau comme un faux positif directement depuis l'interface.

La raison pour laquelle je recommande la suppression d'avertissements spécifiques est qu'il est préférable de bloquer un problème spécifique au lieu d'utiliser //NOSONARet de risquer qu'un problème de Sonar s'infiltre dans votre code par accident.

Vous pouvez en savoir plus à ce sujet dans la FAQ

Remarque: Gábor Bakos pointe vers l'ancienne FAQ qui est maintenant 404. Ceci est le premier résultat Google pour moi, donc je veux aider toute autre personne qui pourrait avoir la même question

Edit: 30/06/16 SonarQube s'appelle désormais SonarLint

Au cas où vous vous demandez comment trouver le numéro de calmar. Cliquez simplement sur le message du sondeur (par exemple Remove this method to simply inherit it.) et le problème du sondeur se développera.

En bas à gauche, il aura le numéro de calmar (ex. squid:S1185Maintenabilité> compréhensibilité)

Alors vous pouvez le supprimer en @SuppressWarnings("squid:S1185")

wiredniko
la source
2
Merci pour l'allusion à ingnoe plusieurs avertissements de cube sonar
AlexWien
1
L'autre problème avec le marquage comme un faux positif sur l'interface est que si pour une raison quelconque le projet est supprimé et ajouté à nouveau, tous les indicateurs que vous avez définis disparaîtront.
annedroiid
@annedroiid - Y a-t-il un moyen si la même chose peut être faite dans le fichier pom.xml? J'ai soulevé une question ici: stackoverflow.com/questions/57789832/…
Pra_A
8

Utilisez // NOSONAR sur la ligne qui vous avertit si vous ne pouvez pas aider votre code. Ça marche!

Jain
la source
4

Je ne parviens pas à trouver le numéro de calmar dans le sonar 5.6, avec cette annotation fonctionne également:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})
Noker
la source
1
squidest pour la base de données Java provenant de Sonar (SonarAnalyzer Java). pmdet se checkstyletrouvent sur d'autres référentiels de règles.
Daniel C.Sobral