Mar*_*ark 46 java eclipse checkstyle
我试图忽略或CheckStyle的与注释禁用月食一些无用的警告,@SuppressWarnings
像
如何禁用特定的CheckStyle规则特定的代码行?
但这对我不起作用.
这是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"/>
...
Run Code Online (Sandbox Code Playgroud)
这里是java代码:
@SuppressWarnings("checkstyle:CyclomaticComplexity")
public void doSomeThing() {
...
}
Run Code Online (Sandbox Code Playgroud)
同时设定警告值设置为"所有" @SuppressWarnings("all")
或者@SuppressWarnings("CyclomaticComplexity")
,@SuppressWarnings("cyclomaticcomplexity")
是没有任何结果.
checkstyle的文档很差.一些想法?
Ste*_*fan 69
A.抑制警告过滤器
使用checkstyle 6.5.0,我可以使用@SuppressWarnings.请考虑以下几点:
checkstyle模块"MagicNumber"的一些示例:
Works:
@SuppressWarnings("checkstyle:magicnumber")
public example(){
int g = 5;
}
Run Code Online (Sandbox Code Playgroud)
.
@SuppressWarnings("magicnumber")
public example(){
int g = 5;
}
Run Code Online (Sandbox Code Playgroud)
Does not work:
@SuppressWarnings("MagicNumber")
public example(){
int g = 5;
}
Run Code Online (Sandbox Code Playgroud)
.
@SuppressWarnings("magicNumber")
public example(){
int g = 5;
}
Run Code Online (Sandbox Code Playgroud)
.
public example(){
@SuppressWarnings("magicnumber")
int g = 5;
}
Run Code Online (Sandbox Code Playgroud)
Further notes
I got a warning unsupported suppresswarnings which I disabled in the Eclipse preferences with Java=>Compiler=>Errors/Warnings=>Annotations=>Unhandled token in '@SuppressWarnings'': Ignore
The name (as defined in the xml file) of the corresponding checkstyle module is not shown in the violation message that pops up when hovering over a code issue. I enabled the option "include module id (if available) in violation message" and manually altered all module ids to be the same as the corresponding module name in the xml file, but lower case. For example there is a module <name="AnonInnerLength"> which is displayed in the Eclipse checkstyle settings as "Anonymous inner classes length". That module had no module id. I changed the module id to checkstyle:anoninnerlength to make it easier for my colleagues to suppress the warning:
<module name="AnonInnerLength">
<property name="id" value="checkstyle:anoninnerlength"/>
<module>
I use the prefix "checkstyle:" in the module id as well as in the SuppressWarnings tag to make it explicit that the warning is not a "standard Eclipse warning". (The optional prefix "checkstyle:" could already be used in the tag without altering the module id. However, the prefix would not be shown in the violation message. Including it in the module id makes the message more transparent and motivates my colleagues to include the prefix in the tag, too.)
B. Suppression Comment Filter
作品:
//CHECKSTYLE:OFF: checkstyle:magicnumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: checkstyle:magicnumber
Run Code Online (Sandbox Code Playgroud)
.
//CHECKSTYLE:OFF: MagicNumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: MagicNumber
Run Code Online (Sandbox Code Playgroud)
不起作用:
//CHECKSTYLE:OFF: magicnumber
public example(){
int g = 5;
}
//CHECKSTYLE:ON: magicnumber
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我的checkstyle版本是8.1
.
它适用于gradle配置,如下所示:
build.gradle
:
apply plugin: 'checkstyle'
checkstyle {
configFile = file('config/checkstyle.xml')
toolVersion = '8.1'
}
Run Code Online (Sandbox Code Playgroud)
并忽略这样的幻数:
@SuppressWarnings("checkstyle:MagicNumber")
private String f(String a) {
String b = a.substring(0, 7);
String c = a.substring(a.length() - 3);
return b + "-" + c;
}
Run Code Online (Sandbox Code Playgroud)
注意:前缀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>
Run Code Online (Sandbox Code Playgroud)