J'essaie d'ignorer ou de désactiver certains avertissements inutiles dans Eclipse par checkstyle avec l'annotation @SuppressWarnings
Comme Comment désactiver une règle de checkstyle particulière pour une ligne de code particulière?
mais ça ne marche pas pour moi.
Voici le checkstyle.xml
<module name="Checker">
<property name="severity" value="warning"/>
<module name="SuppressWarningsFilter"/>
<module name="TreeWalker">
<property name="tabWidth" value="4"/>
<module name="FileContentsHolder"/>
<module name="SuppressWarningsHolder"/>
<module name="CyclomaticComplexity"/>
...
et voici le Java:
@SuppressWarnings("checkstyle:CyclomaticComplexity")
public void doSomeThing() {
...
}
Définissez également la valeur d'avertissement sur "tout" @SuppressWarnings("all")
ou @SuppressWarnings("CyclomaticComplexity")
, @SuppressWarnings("cyclomaticcomplexity")
est sans résultat.
La documentation de checkstyle est médiocre. Quelques idées?
Filtre A. SuppressWarnings
Avec checkstyle 6.5.0, je peux utiliser @SuppressWarnings. Veuillez considérer les points suivants:
Quelques exemples pour le module checkstyle "MagicNumber":
Works:
@SuppressWarnings("checkstyle:magicnumber")
public example(){
int g = 5;
}
.
@SuppressWarnings("magicnumber")
public example(){
int g = 5;
}
Ne fonctionne pas:
@SuppressWarnings("MagicNumber")
public example(){
int g = 5;
}
.
@SuppressWarnings("magicNumber")
public example(){
int g = 5;
}
.
public example(){
@SuppressWarnings("magicnumber")
int g = 5;
}
Notes complémentaires
J'ai reçu un avertissement suppresswarnings non pris en charge que j'ai désactivé dans les préférences Eclipse avec Java => Compilateur => Erreurs/Avertissements => Annotations => Jeton non géré dans '@SuppressWarnings' ': Ignorer
Le nom (tel que défini dans le fichier xml) du module checkstyle correspondant est n'apparaît pas dans le message de violation qui apparaît lors du survol d'un problème de code. J'ai activé l'option "inclure l'ID du module (si disponible) dans le message de violation" et modifié manuellement tous les ID du module afin qu'ils soient identiques au nom du module correspondant dans le fichier XML, mais en minuscules. Par exemple, il existe un module <name = "AnonInnerLength"> qui est affiché dans les paramètres de contrôle de style Eclipse en tant que "longueur des classes internes anonymes". Ce module n'avait pas d'identifiant de module. J'ai changé l'id du module en checkstyle: anoninnerlength pour permettre à mes collègues de supprimer l'avertissement plus facilement:
<nom du module = "AnonInnerLength">
<property name = "id" value = "checkstyle: anoninnerlength" />
<module>
J'utilise le préfixe "checkstyle:" dans l'ID de module ainsi que dans la balise SuppressWarnings pour indiquer explicitement que l'avertissement n'est pas un "avertissement Eclipse standard". (Le préfixe facultatif "checkstyle:" pourrait déjà être utilisé dans la balise sans modifier l'identifiant du module. Toutefois, le préfixe ne serait pas affiché dans le message de violation. L'inclure dans l'identifiant du module rend le message plus transparent et motive mes collègues à inclure également le préfixe dans la balise.)
Filtre de commentaires de suppression
Works:
//CHECKSTYLE:OFF: checkstyle:magicnumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: checkstyle:magicnumber
.
//CHECKSTYLE:OFF: MagicNumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: MagicNumber
Ne fonctionne pas:
//CHECKSTYLE:OFF: magicnumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: magicnumber
C. Exemple de fichier checkstyle settings.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<!--
Checkstyle-Configuration with module ids that can be used as
tags in @SuppressWarnings
-->
<module name="Checker">
<property name="severity" value="warning"/>
<module name="TreeWalker">
<property name="tabWidth" value="4"/>
<module name="FileContentsHolder"/>
<module name="SuppressWarningsHolder"/>
<module name="JavadocMethod">
<property name="id" value="checkstyle:javadocmethod"/>
<property name="severity" value="ignore"/>
<property name="allowMissingParamTags" value="true"/>
<property name="allowMissingThrowsTags" value="true"/>
<property name="allowMissingReturnTag" value="true"/>
<property name="suppressLoadErrors" value="true"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="JavadocType">
<property name="id" value="checkstyle:javadoctype"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="JavadocVariable">
<property name="id" value="checkstyle:javadocvariable"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="JavadocStyle">
<property name="id" value="checkstyle:javadocstyle"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="ConstantName">
<property name="id" value="checkstyle:constantname"/>
</module>
<module name="LocalFinalVariableName">
<property name="id" value="checkstyle:localfinalvariablename"/>
</module>
<module name="LocalVariableName">
<property name="id" value="checkstyle:localvariablename"/>
</module>
<module name="MemberName">
<property name="id" value="checkstyle:membername"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="MethodName">
<property name="id" value="checkstyle:methodname"/>
</module>
<module name="PackageName">
<property name="id" value="checkstyle:packagename"/>
</module>
<module name="ParameterName">
<property name="id" value="checkstyle:parametername"/>
</module>
<module name="StaticVariableName">
<property name="id" value="checkstyle:staticvariablename"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="TypeName">
<property name="id" value="checkstyle:typename"/>
</module>
<module name="AvoidStarImport">
<property name="id" value="checkstyle:avoidstarimport"/>
</module>
<module name="IllegalImport">
<property name="id" value="checkstyle:illegalimport"/>
</module>
<module name="RedundantImport">
<property name="id" value="checkstyle:redundantimport"/>
</module>
<module name="UnusedImports">
<property name="id" value="checkstyle:unusedimports"/>
</module>
<module name="ParameterNumber">
<property name="id" value="checkstyle:parameternumber"/>
</module>
<module name="EmptyForIteratorPad">
<property name="id" value="checkstyle:emptyforiteratorpad"/>
</module>
<module name="MethodParamPad">
<property name="id" value="checkstyle:methodparampad"/>
</module>
<module name="NoWhitespaceAfter">
<property name="id" value="checkstyle:nowhitespaceafter"/>
<property name="tokens" value="BNOT,DEC,DOT,INC,LNOT,UNARY_MINUS,UNARY_PLUS"/>
</module>
<module name="NoWhitespaceBefore">
<property name="id" value="checkstyle:nowhitespacebefore"/>
</module>
<module name="OperatorWrap">
<property name="id" value="checkstyle:operatorwrap"/>
<property name="option" value="eol"/>
</module>
<module name="ParenPad">
<property name="id" value="checkstyle:parenpad"/>
</module>
<module name="TypecastParenPad">
<property name="id" value="checkstyle:typecastparenpad"/>
</module>
<module name="WhitespaceAfter">
<property name="id" value="checkstyle:whitespaceafter"/>
</module>
<module name="WhitespaceAround">
<property name="id" value="checkstyle:whitespacearound"/>
</module>
<module name="ModifierOrder">
<property name="id" value="checkstyle:modifierorder"/>
</module>
<module name="RedundantModifier">
<property name="id" value="checkstyle:redundantmodifier"/>
</module>
<module name="LeftCurly">
<property name="id" value="checkstyle:leftcurly"/>
</module>
<module name="NeedBraces">
<property name="id" value="checkstyle:needbraces"/>
</module>
<module name="RightCurly">
<property name="id" value="checkstyle:rightcurly"/>
</module>
<module name="AvoidInlineConditionals">
<property name="id" value="checkstyle:avoidinlineconditionals"/>
</module>
<module name="EmptyStatement">
<property name="id" value="checkstyle:emptystatement"/>
</module>
<module name="HiddenField">
<property name="id" value="checkstyle:hiddenfield"/>
<property name="tokens" value="VARIABLE_DEF"/>
</module>
<module name="IllegalInstantiation">
<property name="id" value="checkstyle:illegalinstantiation"/>
</module>
<module name="InnerAssignment">
<property name="id" value="checkstyle:innerassignment"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="MagicNumber">
<property name="id" value="checkstyle:magicnumber"/>
</module>
<module name="MissingSwitchDefault">
<property name="id" value="checkstyle:missingswitchdefault"/>
</module>
<module name="RedundantThrows">
<property name="id" value="checkstyle:redundantthrows"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="SimplifyBooleanExpression">
<property name="id" value="checkstyle:simplifybooleanexpression"/>
</module>
<module name="SimplifyBooleanReturn">
<property name="id" value="checkstyle:simplifybooleanreturn"/>
</module>
<module name="DesignForExtension">
<property name="id" value="checkstyle:designforextension"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="FinalClass">
<property name="id" value="checkstyle:finalclass"/>
</module>
<module name="HideUtilityClassConstructor">
<property name="id" value="checkstyle:hideutilityclassconstructor"/>
</module>
<module name="VisibilityModifier">
<property name="id" value="checkstyle:visibilitymodifier"/>
</module>
<module name="ArrayTypeStyle">
<property name="id" value="checkstyle:arraytypestyle"/>
</module>
<module name="UpperEll">
<property name="id" value="checkstyle:upperell"/>
</module>
<module name="AnnotationUseStyle">
<property name="id" value="checkstyle:annotationusestyle"/>
</module>
<module name="MissingDeprecated">
<property name="id" value="checkstyle:missingdeprecated"/>
</module>
<module name="MissingOverride">
<property name="id" value="checkstyle:missingoverride"/>
</module>
<module name="PackageAnnotation">
<property name="id" value="checkstyle:packageannotation"/>
</module>
<module name="AbstractClassName">
<property name="id" value="checkstyle:abstractclassname"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="AnonInnerLength">
<property name="id" value="checkstyle:anoninnerlength"/>
</module>
<module name="ExecutableStatementCount">
<property name="id" value="checkstyle:executablestatementcount"/>
<property name="max" value="20"/>
<property name="tokens" value="INSTANCE_INIT,STATIC_INIT,METHOD_DEF,CTOR_DEF"/>
</module>
<module name="LineLength">
<property name="id" value="checkstyle:linelength"/>
<property name="max" value="120"/>
<property name="tabWidth" value="4"/>
</module>
<module name="MethodLength">
<property name="id" value="checkstyle:methodlength"/>
<property name="severity" value="ignore"/>
<property name="max" value="20"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="OuterTypeNumber">
<property name="id" value="checkstyle:outertypenumber"/>
</module>
<module name="RegexpSinglelineJava">
<property name="id" value="checkstyle:regexpsinglelinejava"/>
<property name="format" value="^.*System.out.println.*$"/>
<property name="ignoreComments" value="true"/>
</module>
<module name="AvoidNestedBlocks">
<property name="id" value="checkstyle:avoidnestedblocks"/>
<property name="allowInSwitchCase" value="true"/>
</module>
<module name="CovariantEquals">
<property name="id" value="checkstyle:covariantequals"/>
</module>
<module name="DefaultComesLast">
<property name="id" value="checkstyle:defaultcomeslast"/>
</module>
<module name="DeclarationOrder">
<property name="id" value="checkstyle:declarationorder"/>
</module>
<module name="EqualsHashCode">
<property name="id" value="checkstyle:equalshashcode"/>
</module>
<module name="ExplicitInitialization">
<property name="id" value="checkstyle:explicitinitialization"/>
</module>
<module name="FallThrough">
<property name="id" value="checkstyle:fallthrough"/>
</module>
<module name="IllegalCatch">
<property name="id" value="checkstyle:illegalcatch"/>
</module>
<module name="IllegalThrows">
<property name="id" value="checkstyle:illegalthrows"/>
</module>
<module name="MissingCtor">
<property name="id" value="checkstyle:missingctor"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="ModifiedControlVariable">
<property name="id" value="checkstyle:modifiedcontrolvariable"/>
</module>
<module name="MultipleStringLiterals">
<property name="id" value="checkstyle:multiplestringliterals"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="MultipleVariableDeclarations">
<property name="id" value="checkstyle:multiplevariabledeclarations"/>
</module>
<module name="NestedForDepth">
<property name="id" value="checkstyle:nestedfordepth"/>
<property name="max" value="2"/>
</module>
<module name="NestedIfDepth">
<property name="id" value="checkstyle:nestedifdepth"/>
<property name="max" value="2"/>
</module>
<module name="NestedTryDepth">
<property name="id" value="checkstyle:nestedtrydepth"/>
</module>
<module name="NoClone">
<property name="id" value="checkstyle:noclone"/>
</module>
<module name="NoFinalizer">
<property name="id" value="checkstyle:nofinalizer"/>
</module>
<module name="ParameterAssignment">
<property name="id" value="checkstyle:parameterassignment"/>
</module>
<module name="StringLiteralEquality">
<property name="id" value="checkstyle:stringliteralequality"/>
</module>
<module name="OneStatementPerLine">
<property name="id" value="checkstyle:onestatementperline"/>
</module>
<module name="InnerTypeLast">
<property name="id" value="checkstyle:innertypelast"/>
</module>
<module name="InterfaceIsType">
<property name="id" value="checkstyle:interfaceistype"/>
</module>
<module name="MutableException">
<property name="id" value="checkstyle:mutableexception"/>
</module>
<module name="BooleanExpressionComplexity">
<property name="id" value="checkstyle:booleanexpressioncomplexity"/>
</module>
<module name="ClassFanOutComplexity">
<property name="id" value="checkstyle:classfanoutcomplexity"/>
<property name="max" value="10"/>
</module>
<module name="JavaNCSS">
<property name="id" value="checkstyle:gavancss"/>
<property name="methodMaximum" value="20"/>
</module>
<module name="NPathComplexity">
<property name="id" value="checkstyle:npathcomplexity"/>
<property name="max" value="1200"/>
</module>
<module name="TrailingComment">
<property name="id" value="checkstyle:trailingcomment"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="UncommentedMain">
<property name="id" value="checkstyle:uncommentedmain"/>
</module>
<module name="CyclomaticComplexity">
<property name="id" value="checkstyle:cyclomaticcomplexity"/>
<property name="max" value="7"/>
</module>
<module name="StrictDuplicateCode">
<property name="id" value="checkstyle:strictduplicatecode"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="SuppressWarnings">
<property name="id" value="checkstyle:suppresswarnings"/>
</module>
</module>
<module name="JavadocPackage">
<property name="id" value="checkstyle:javadocpackage"/>
<property name="severity" value="ignore"/>
<metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
</module>
<module name="Translation">
<property name="id" value="checkstyle:translation"/>
</module>
<module name="FileLength">
<property name="id" value="checkstyle:filelength"/>
<property name="max" value="1000"/>
</module>
<module name="NewlineAtEndOfFile">
<property name="id" value="checkstyle:newlineatendoffile"/>
<property name="fileExtensions" value="*.Java"/>
</module>
<module name="SuppressWithNearbyCommentFilter"/>
<module name="SuppressWarningsFilter"/>
<module name="SuppressionCommentFilter">
<metadata name="net.sf.eclipsecs.core.comment" value="Single warning"/>
<property name="offCommentFormat" value="CHECKSTYLE\:OFF\: ([\w\|]+)"/>
<property name="onCommentFormat" value="CHECKSTYLE\:ON\: ([\w\|]+)"/>
<property name="checkFormat" value="$1"/>
</module>
</module>
Ma version de checkstyle est 8.1
.
Cela fonctionne avec gradle config comme ceci:
build.gradle
:
apply plugin: 'checkstyle'
checkstyle {
configFile = file('config/checkstyle.xml')
toolVersion = '8.1'
}
Et ignorer le nombre magique comme ceci:
@SuppressWarnings("checkstyle:MagicNumber")
private String f(String a) {
String b = a.substring(0, 7);
String c = a.substring(a.length() - 3);
return b + "-" + c;
}
NOTE: préfixe checkstyle:
est facultatif. J'espère que cela peut aider quelqu'un.
Juste pour souligner le commentaire de Caio Faustino qui résout le problème du moins pour checkstyle 8.19.
<module name="SuppressWarningsHolder"/>
à l'élément Treewalker
.<module name="SuppressWarningsFilter"/>
comme module général.<module name="Checker">
<--! ... -->
<module name="TreeWalker">
<--! ... -->
<module name="SuppressWarningsHolder"/>
</module>
<module name="SuppressWarningsFilter"/>
</module>