我尝试忽略或禁用eclipse中的一些无用的警告,通过checkstyle与注释@SuppressWarnings
像How to disable a particular checkstyle rule for a particular line of code?
但这对我不起作用。
这是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"/>
...
这里是java代码:
@SuppressWarnings("checkstyle:CyclomaticComplexity")
public void doSomeThing() {
...
}
同时将警告值设置为“all”@SuppressWarnings("all")
或@SuppressWarnings("CyclomaticComplexity")
,@SuppressWarnings("cyclomaticcomplexity")
没有任何结果。
checkstyle的文档很差。一些想法?
A.抑制警告过滤器
使用checkstyle 6.5.0,我可以使用@SuppressWarnings。请考虑以下几点:
checkstyle模块“MagicNumber”的一些示例:
作品:
@SuppressWarnings("checkstyle:magicnumber")
public example(){
int g = 5;
}
.
@SuppressWarnings("magicnumber")
public example(){
int g = 5;
}
不起作用:
@SuppressWarnings("MagicNumber")
public example(){
int g = 5;
}
.
@SuppressWarnings("magicNumber")
public example(){
int g = 5;
}
.
public example(){
@SuppressWarnings("magicnumber")
int g = 5;
}
进一步说明
B.抑制评论过滤器
作品:
//CHECKSTYLE:OFF: checkstyle:magicnumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: checkstyle:magicnumber
.
//CHECKSTYLE:OFF: MagicNumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: MagicNumber
不起作用:
//CHECKSTYLE:OFF: magicnumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: magicnumber
C.示例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>
我的checkstyle版本是8.1
。
它适用于gradle配置,如下所示:
build.gradle
:
apply plugin: 'checkstyle'
checkstyle {
configFile = file('config/checkstyle.xml')
toolVersion = '8.1'
}
并忽略这样的幻数:
@SuppressWarnings("checkstyle:MagicNumber")
private String f(String a) {
String b = a.substring(0, 7);
String c = a.substring(a.length() - 3);
return b + "-" + c;
}
注意:前缀checkstyle:
是可选的。希望这可以帮助别人。
只是为了强调Caio Faustino的评论,至少对于checkstyle 8.19来解决问题。
<module name="SuppressWarningsHolder"/>
添加到Treewalker
元素中。<module name="SuppressWarningsFilter"/>
作为通用模块。<module name="Checker">
<--! ... -->
<module name="TreeWalker">
<--! ... -->
<module name="SuppressWarningsHolder"/>
</module>
<module name="SuppressWarningsFilter"/>
</module>