checkstyle.xml规约案例

我们可以使用checkstyle工具,来检测并规范我们的代码。
这是我自己整理的checkstyle规约,可以以xml格式的形式导入到开发工具中。
欢迎大家的收藏,同时也欢迎大家评论提出宝贵的建议。

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
        "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
        "https://checkstyle.org/dtds/configuration_1_3.dtd">

<module name="Checker">

  <!-- Size Violations  行数、列数限制规范 -->
  <!-- 文件长度不超过15000行 -->
  <module name="FileLength">
    <property name="max" value="15000"/>
  </module>

  <!-- 一行长度不超过120字符 -->
  <module name="LineLength">
    <property name="max" value="120"/>
    <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
    <property name="fileExtensions" value="java"/>
  </module>

  <module name="FileTabCharacter">
    <property name="eachLine" value="true"/>
  </module>
  <!-- Size Violations  行数、列数限制规范 -->

  <!-- 文件开头公司声明信息 -->
  <module name="RegexpHeader">
    <property name="header" value="^/\*\*$\n^ \* Copyright \d{4}-\d{4} XXXX公司保留所有权利。$\n^ \*/$"/>
    <property name="fileExtensions" value="java" />
  </module>

  <!-- 检查文件是否有制表位-->
  <module name="TreeWalker">
    <!-- Block Checks 代码块检查 -->
    <!-- 检查是否有嵌套代码块 -->
    <module name="AvoidNestedBlocks"/>

    <!-- 不能有空代码块 -->
    <module name="EmptyBlock">
      <property name="option" value="TEXT"/>
      <property name="tokens"
                value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
    </module>

    <!-- 需要有括号 -->
    <module name="NeedBraces">
      <property name="tokens"
                value="LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_IF, LITERAL_WHILE"/>
    </module>

    <!-- 左括号 -->
    <module name="LeftCurly">
      <property name="tokens"
                value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF,
                    INTERFACE_DEF, LAMBDA, LITERAL_CASE, LITERAL_CATCH, LITERAL_DEFAULT,
                    LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF,
                    LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF,
                    OBJBLOCK, STATIC_INIT"/>
    </module>

    <!-- 右括号 -->
    <module name="RightCurly">
      <property name="id" value="RightCurlyAlone"/>
      <property name="option" value="alone"/>
      <property name="tokens"
                value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT,
                    INSTANCE_INIT, ANNOTATION_DEF, ENUM_DEF"/>
    </module>
    <!-- Block Checks 代码块检查 -->

    <!-- Class Design 类设计检查 -->
    <!-- 检查只有private构造函数的类是否声明为final -->
    <module name="FinalClass"/>
    <!-- 检查工具类是否有public的构造器 -->
    <module name="HideUtilityClassConstructor"/>
    <!-- 内部类声明在最下面 -->
    <module name="InnerTypeLast"/>
    <!-- 一个文件里不能有2个类 -->
    <module name="OneTopLevelClass"/>
    <!-- 检查类成员的可见度 检查类成员的可见性。只有static final 成员是public的
    除非在本检查的protectedAllowed和packagedAllowed属性中进行了设置-->
    <module name="VisibilityModifier">
      <property name="packageAllowed" value="true"/>
      <property name="protectedAllowed" value="true"/>
    </module>
    <!-- Class Design 类设计检查 -->

    <!-- Coding 代码检查 -->
    <!-- 声明顺序 -->
    <module name="DeclarationOrder"/>
    <!-- default 在switch块的最后、必须有break -->
    <module name="DefaultComesLast"/>
    <module name="FallThrough"/>
    <!-- 检查switch语句是否有default -->
    <module name="MissingSwitchDefault"/>
    <!-- 空代码段 -->
    <module name="EmptyStatement"/>
    <!-- 字符串常量写在equals左侧 -->
    <module name="EqualsAvoidNull"/>
    <!-- 检查局部变量或参数是否隐藏了类中的变量 -->
    <module name="HiddenField">
      <property name="tokens" value="VARIABLE_DEF"/>
    </module>
    <!-- 检查是否使用工厂方法实例化 -->
    <module name="IllegalInstantiation"/>
    <!-- 变量一行一个 -->
    <module name="MultipleVariableDeclarations"/>
    <!-- 限制for循环最多嵌套3层 -->
    <module name="NestedForDepth">
      <property name="max" value="3"/>
    </module>
    <!--try catch 异常处理数量 3-->
    <module name="NestedTryDepth ">
      <property name="max" value="3"/>
    </module>
    <!-- 禁止一行有多条语句 -->
    <module name="OneStatementPerLine"/>

    <!-- 覆写方法定义在一起 -->
    <module name="OverloadMethodsDeclarationOrder"/>
    <!-- String的比较不能用!=== -->
    <module name="StringLiteralEquality"/>
    <!-- finalize 必须调用了super.finalize() -->
    <module name="SuperFinalize"/>
    <!-- Coding 代码检查 -->

    <!-- imports 导入检查-->
    <!-- 避免使用* -->
    <module name="AvoidStarImport">
      <property name="excludes" value="java.io,java.net,java.lang.Math"/>
      <property name="allowClassImports" value="false"/>
      <property name="allowStaticMemberImports" value="false"/>
    </module>
    <!-- 不能静态导入 -->
    <module name="AvoidStaticImport"/>
    <!-- 检查是否导入了多余的包 -->
    <module name="RedundantImport"/>
    <!-- 没用的import检查,比如:1.没有被用到2.重复的3.import java.lang的4.import 与该类在同一个package的 -->
    <module name="UnusedImports"/>
    <!-- imports 导入检查-->

    <!-- javadoc 注释检查 -->
    <!-- 标签顺序 -->
    <module name="AtclauseOrder">
      <property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
      <property name="target"
                value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
    </module>
    <!-- 检查注释位置 -->
    <module name="InvalidJavadocPosition"/>

    <module name="JavadocMethod">
      <property name="scope" value="private"/>
      <property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF"/>
    </module>

    <!-- public 方法需要加注释 -->
    <module name="MissingJavadocMethod">
      <property name="scope" value="public"/>
      <property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF"/>
    </module>
    <!-- javadoc 注释检查 -->

    <!-- miscellaneous 定义检查 -->
    <!-- 检查数组类型定义的样式 -->
    <module name="ArrayTypeStyle"/>
    <!-- 注释与语句缩进字符一致 -->
    <module name="CommentsIndentation">
      <property name="tokens" value="SINGLE_LINE_COMMENT, BLOCK_COMMENT_BEGIN"/>
    </module>
    <!-- 缩进 -->
    <module name="Indentation"/>
    <!-- 类名是否与文件名相同 -->
    <module name="OuterTypeFilename"/>
    <!-- 检查long型定义是否有大写的“L” -->
    <module name="UpperEll"/>
    <!-- miscellaneous 定义检查 -->

    <!-- Modifier 修饰符检查 -->
    <!-- 检查修饰符的顺序是否遵照java语言规范,默认public、protected、private、abstract、static、final、transient、volatile、synchronized、native、strictfp -->
    <module name="ModifierOrder"/>
    <!-- 检查接口和annotation中是否有多余修饰符,如接口方法不必使用public -->
    <module name="RedundantModifier"/>
    <!-- Modifier 修饰符检查 -->

    <!-- Naming Conventions 命名规范 -->
    <module name="MethodName">
      <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
      <message key="name.invalidPattern"
               value="Method name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="PackageName">
      <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
      <message key="name.invalidPattern"
               value="Package name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="TypeName">
      <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF"/>
      <message key="name.invalidPattern"
               value="Type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="MemberName">
      <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
      <message key="name.invalidPattern"
               value="Member name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="ParameterName">
      <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
      <message key="name.invalidPattern"
               value="Parameter name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="CatchParameterName">
      <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
      <message key="name.invalidPattern"
               value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="LocalVariableName">
      <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
      <message key="name.invalidPattern"
               value="Local variable name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="ClassTypeParameterName">
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
      <message key="name.invalidPattern"
               value="Class type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="MethodTypeParameterName">
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
      <message key="name.invalidPattern"
               value="Method type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="InterfaceTypeParameterName">
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
      <message key="name.invalidPattern"
               value="Interface type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <!-- Naming Conventions 命名规范 -->

    <!-- Regexp 正则规范 -->
    <!-- 禁止使用System.out.println -->
    <module name="Regexp">
      <property name="format" value="System\.out\.println"/>
      <property name="illegalPattern" value="true"/>
    </module>
    <!-- Regexp 正则规范 -->

    <!-- whitespace 空格规范 -->
    <module name="EmptyLineSeparator">
      <property name="tokens"
                value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
                    STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
      <property name="allowNoEmptyLineBetweenFields" value="true"/>
    </module>

    <module name="GenericWhitespace"/>
    <!-- 方法名后跟左圆括号"(" -->
    <module name="MethodParamPad"/>

    <!-- 检查在某个特定关键字之后应保留空格 -->
    <module name="NoWhitespaceAfter"/>
    <!-- 检查在某个特定关键字之前应保留空格 -->
    <module name="NoWhitespaceBefore"/>
    <!-- 操作符换行策略检查 -->
    <module name="OperatorWrap"/>
    <!-- 检查分隔符是否在空白之后 -->
    <module name="ParenPad"/>
    <!-- 在类型转换时,不允许左圆括号右边有空格,也不允许与右圆括号左边有空格 -->
    <module name="TypecastParenPad"/>
    <!-- 检查分隔符是否在空白之后 -->
    <module name="WhitespaceAfter"/>
    <!-- 检查分隔符周围是否有空白 -->
    <module name="WhitespaceAround"/>
    <!-- 不换行 -->
    <module name="NoLineWrap">
      <property name="tokens" value="PACKAGE_DEF, IMPORT"/>
    </module>
    <!-- whitespace 空格规范 -->

  </module>
</module>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值