CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。
IDEA安装CheckStyle插件步骤:
1、打开settings的plugins,点击查找CheckStyle-IDEA安装,如果查找不到,打开Browse repositories查找安装。如图:
2、检查checkstyle插件是否生效,如图:
3、打开Settings的Other Settings,选择Checkstyle,添加检查规则的xml文件。如图:
点击Next完成添加。然后选中刚才定义的规则名称
4、添加完成后,打开任意java文件,右键选中Check Current File项,进行规则检查。如图:
根据检查的结果,进行调整代码。
因为不能上传附件,只能把检查规则的文件内容放在这:
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<!--
规则版本号:V1.0(2018-05-11)
本规则重在编程规范,请与PMD、FindBugs结合使用
-->
<module name="Checker">
<!-- 每个java文件一个语法树 -->
<module name="TreeWalker">
<!--
Javadoc Comments2
-->
<module name="JavadocType"/>
<module name="JavadocMethod">
<property name="scope" value="protected"/>
<property name="allowMissingPropertyJavadoc " value="true"/>
<property name="logLoadErrors" value="true"/>
<property name="suppressLoadErrors" value="true"/>
</module>
<module name="JavadocVariable">
<property name="scope" value="public"/>
</module>
<module name="JavadocStyle">
<property name="checkFirstSentence" value="false"/>
<property name="checkEmptyJavadoc" value="true"/>
<property name="checkHtml" value="false"/>
</module>
<!--
Naming Conventions
-->
<module name="ConstantName">
<property name="format" value="(^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$)|(^log$)|(^logger$)"/>
</module>
<module name="LocalFinalVariableName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="LocalVariableName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="MemberName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-zA-Z_][a-zA-Z0-9_]*)*$"/>
</module>
<module name="ParameterName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="StaticVariableName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="TypeName">
<property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>
</module>
<!-- import -->
<!-- 避免使用* -->
<module name="AvoidStarImport"/>
<!-- 检查是否导入了多余的包 -->
<module name="RedundantImport"/>
<!-- 检查是否从非法的包中导入了类 -->
<module name="IllegalImport"/>
<!-- 没用的import检查 -->
<module name="UnusedImports"/>
<!--
Size Violations
-->
<!--<module name="LineLength">
<property name="max" value="120"/>
</module>-->
<module name="AnonInnerLength">
<property name="max" value="60"/>
</module>
<!--
Whitespace
-->
<module name="MethodParamPad"/>
<module name="NoWhitespaceAfter"/>
<module name="NoWhitespaceBefore"/>
<module name="OperatorWrap"/>
<module name="ParenPad"/>
<module name="TypecastParenPad"/>
<!--<module name="TabCharacter"/>-->
<module name="WhitespaceAround">
<property name="tokens" value="COLON,NOT_EQUAL,QUESTION,DIV,DIV_ASSIGN,BXOR,BXOR_ASSIGN,MINUS,LCURLY,RCURLY,STAR,STAR_ASSIGN,TYPE_EXTENSION_AND,BAND,LAND,BAND_ASSIGN,MOD,MOD_ASSIGN,PLUS,PLUS_ASSIGN,LT,SL,SL_ASSIGN,LE,ASSIGN,MINUS_ASSIGN,EQUAL,GT,GE,SR,SR_ASSIGN,BSR,BSR_ASSIGN,BOR,BOR_ASSIGN,LOR,LITERAL_ASSERT,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,SLIST,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE"/>
</module>
<!--
Modifiers
-->
<module name="ModifierOrder"/>
<!-- Block Checks -->
<module name="EmptyBlock"/>
<module name="LeftCurly">
<property name="option" value="eol"/>
</module>
<module name="NeedBraces"/>
<module name="RightCurly">
<property name="option" value="alone"/>
</module>
<module name="AvoidNestedBlocks">
<property name="allowInSwitchCase" value="true"/>
</module>
<!-- Coding -->
<!-- 检查局部变量或参数是否隐藏了类中的变量 -->
<module name="HiddenField">
<property name="ignoreConstructorParameter" value="true"/>
<property name="ignoreSetter" value="true"/>
<property name="ignoreAbstractMethods" value="true"/>
</module>
<!-- 检查是否有"魔鬼"数字 -->
<module name="MagicNumber">
<property name="tokens" value="NUM_DOUBLE, NUM_FLOAT, NUM_LONG"/>
<property name="ignoreNumbers" value="-1, 0, 1"/>
</module>
<!-- <module name="RedundantThrows">
<property name="logLoadErrors" value="true"/>
<property name="suppressLoadErrors" value="true"/>
</module>-->
<module name="NestedTryDepth">
<property name="max" value="2"/>
</module>
<module name="IllegalThrows"/>
<module name="DeclarationOrder"/>
<module name="UnnecessaryParentheses"/>
<!-- Class Design -->
<module name="VisibilityModifier">
<property name="packageAllowed" value="true"/>
<property name="protectedAllowed" value="true"/>
</module>
<!--<module name="HideUtilityClassConstructor"/> -->
<module name="ThrowsCount">
<property name="max" value="3"/>
</module>
<!-- Metrics -->
<module name="BooleanExpressionComplexity">
<property name="max" value="5"/>
</module>
<!-- Miscellaneous -->
<!--<module name="Indentation"/>-->
<module name="UncommentedMain"/>
</module>
</module>