229 votes

Comment désactiver une règle de contrôle particulière pour une ligne de code particulière?

J'ai une règle de validation checkstyle configurée dans mon projet, qui interdit de définir des méthodes de classe avec plus de 3 paramètres d'entrée. La règle fonctionne bien pour mes cours, mais parfois, je dois étendre des cours tiers, qui ne respectent pas cette règle.

Est-il possible d'indiquer à "checkstyle" qu'une certaine méthode doit être ignorée en silence?

353voto

Chris Knight Points 7946

Découvrez l'utilisation de la supressionCommentFilter à http://checkstyle.sourceforge.net/config.html. Vous aurez besoin d'ajouter le module à votre checkstyle.xml

<module name="SuppressionCommentFilter"/>

et ses configurable. Ainsi, vous pouvez ajouter des commentaires dans votre code pour désactiver checkstyle (à différents niveaux), puis à nouveau par le biais de l'utilisation des commentaires dans votre code. E. g.

//CHECKSTYLE:OFF
public void someMethod(String arg1, String arg2, String arg3, String arg4) {
//CHECKSTYLE:ON

Ou mieux encore, utiliser cette tweaked version:

<module name="SuppressionCommentFilter">
    <property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
    <property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
    <property name="checkFormat" value="$1"/>
</module>

qui vous permet de désactiver les contrôles spécifiques pour certaines lignes de code:

//CHECKSTYLE.OFF: IllegalCatch - Much more readable than catching 7 exceptions
catch (Exception e)
//CHECKSTYLE.ON: IllegalCatch

Voir aussi

<module name="SuppressionFilter">
    <property name="file" value="docs/suppressions.xml"/>
</module>

en vertu de la SuppressionFilter section sur la même page, ce qui vous permet de désactiver les contrôles individuels pour motif trouvé les ressources.

Donc, si vous avez dans votre checkstyle.xml:

<module name="ParameterNumber">
   <property name="id" value="maxParameterNumber"/>
   <property name="max" value="3"/>
   <property name="tokens" value="METHOD_DEF"/>
</module>

Vous pouvez la désactiver dans votre suppression du fichier xml:

<suppress id="maxParameterNumber" files="YourCode.java"/>

Une autre méthode, qui est maintenant disponible dans Checkstyle 5.7 est de réprimer les violations par le biais de l' @SuppressWarnigns annotation java. Pour ce faire, vous aurez besoin de nouveaux modules (SuppressWarningsFilter et SuppressWarningsHolder) dans votre fichier de configuration:

<module name="Checker">
   ...
   <module name="SuppressWarningsFilter" />
   <module name="TreeWalker">
       ...
       <module name="SuppressWarningsHolder" />
   </module>
</module> 

Ensuite, dans votre code, vous pouvez effectuer les opérations suivantes:

  @SuppressWarnings("checkstyle:methodlength")
  public void someLongMethod() throws Exception {

ou, pour de multiples suppressions:

  @SuppressWarnings({"checkstyle:executablestatementcount", "checkstyle:methodlength"})
  public void someLongMethod() throws Exception {

Le "checkstyle:" préfixe est facultatif (mais recommandé) et le nom de paramètre doit être en minuscules.

85voto

hheimbuerger Points 3156

Si vous préférez utiliser les annotations de manière sélective silence règles, c'est désormais possible à l'aide de l' @SuppressWarnings d'annotation, en commençant avec Checkstyle 5.7 (et pris en charge par le Checkstyle Plugin Maven 2.12+).

Tout d'abord, dans votre checkstyle.xml, ajouter l' SuppressWarningsHolder module TreeWalker:

<module name="TreeWalker">
    <!-- Make the @SuppressWarnings annotations available to Checkstyle -->
    <module name="SuppressWarningsHolder" />
</module>

Ensuite, activez l' SuppressWarningsFilter il y:

<!-- Filter out Checkstyle warnings that have been suppressed with the @SuppressWarnings annotation -->
<module name="SuppressWarningsFilter" />

Maintenant, vous pouvez annoter par exemple, la méthode que vous souhaitez exclure à partir d'un certain Checkstyle règle:

@SuppressWarnings("checkstyle:methodlength")
@Override
public boolean equals(Object obj) {
    // very long auto-generated equals() method
}

L' checkstyle: préfixe dans l'argument d' @SuppressWarnings est facultatif, mais je l'aime comme un rappel où cet avertissement est venu.

Enfin, si vous utilisez Eclipse, il va se plaindre à propos de l'argument étant inconnu pour elle:

Non pris en charge @SuppressWarnings("checkstyle:methodlength")

Vous pouvez désactiver cette Éclipse d'avertissement dans les préférences si vous le souhaitez:

Preferences:
  Java
  --> Compiler
  --> Errors/Warnings
  --> Annotations
  --> Unhandled token in '@SuppressWarnings': set to 'Ignore'

35voto

Akos Cz Points 3880

Ce qui fonctionne aussi bien, c'est le SuppressWithNearbyCommentFilter qui utilise les commentaires pour supprimer les événements d'audit.

Par exemple

// CHECKSTYLE IGNORE check FOR NEXT 1 LINES
public void onClick(View view) { ... }

Pour configurer un filtre de sorte que CHECKSTYLE IGNORER vérifier POUR la PROCHAINE var LIGNES évite le déclenchement de toute vérification pour le contrôle de la ligne actuelle et la prochaine var lignes (pour un total de var+1 lignes):

<module name="SuppressWithNearbyCommentFilter">
    <property name="commentFormat" value="CHECKSTYLE IGNORE (\w+) FOR NEXT (\d+) LINES"/>
    <property name="checkFormat" value="$1"/>
    <property name="influenceFormat" value="$2"/>
</module>

http://checkstyle.sourceforge.net/config.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X