CheckSytle推薦配置

公司做的是傳統B/S架構項目,所以以下配置參考了谷歌和阿里的標準修改而來,適合公司的基本規範。

CheckStyle配置參考官網:https://checkstyle.org/checks.html

<?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  行數、列數限制規範 -->
  <!-- 文件長度不超過1500行 -->
  <module name="FileLength">
    <property name="max" value="1500"/>
  </module>

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

  <module name="FileTabCharacter">
    <property name="eachLine" value="true"/>
  </module>
  <!-- Size Violations  行數、列數限制規範 -->

  <!-- 檢查文件是否有製表位-->
  <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="InnerAssignment"/>
    <!-- 變量一行一個 -->
    <module name="MultipleVariableDeclarations"/>
    <!-- 限制for循環最多嵌套3層 -->
    <module name="NestedForDepth">
      <property name="max" value="3"/>
    </module>
    <!-- if最多嵌套3層 -->
    <module name="NestedIfDepth">
      <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="IllegalImport"/>
    <!-- 檢查是否導入了多餘的包 -->
    <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="public"/>
      <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-z0-9][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-z0-9][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-z0-9][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-z0-9][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-z0-9][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>

    <!-- 文件開頭公司聲明信息 -->
    <module name="Regexp">

    </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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章