Java程式碼靜態檢查、規範、格式化和checkstyle檢查配置文件
阿新 • • 發佈:2019-01-02
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<module name="Checker">
<property name="severity" value="warning"/>
<module name="StrictDuplicateCode" >
<property name="charset" value="utf-8"/>
</module>
<module name="TreeWalker">
<!-- javadoc的檢查 -->
<!-- 檢查所有的interface和class -->
<module name="JavadocType"/>
<!-- 命名方面的檢查 -->
<!-- 區域性的final變數,包括catch中的引數的檢查 -->
<module name="LocalFinalVariableName"/>
<!-- 區域性的非final型的變數,包括catch中的引數的檢查 -->
<module name="LocalVariableName"/>
<!-- 包名的檢查(只允許小寫字母) -->
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
</module>
<!-- 僅僅是static型的變數(不包括static final型)的檢查 -->
<module name="StaticVariableName"/>
<!-- 型別(Class或Interface)名的檢查 -->
<module name="TypeName"/>
<!-- 非static型變數的檢查 -->
<module name="MemberName"/>
<!-- 方法名的檢查 -->
<module name="MethodName"/>
<!-- 方法的引數名 -->
<module name="ParameterName "/>
<!-- 常量名的檢查 -->
<module name="ConstantName"/>
<!-- 沒用的import檢查,比如:1.沒有被用到2.重複的3.import java.lang的4.import 與該類在同一個package的 -->
<module name="UnusedImports"/>
<!-- 長度方面的檢查 -->
<!-- 檔案長度不超過1500行 -->
<module name="FileLength">
<property name="max" value="1500"/>
</module>
<!-- 每行不超過150個字-->
<module name="LineLength">
<property name="max" value="150"/>
</module>
<!-- 方法不超過150行 -->
<module name="MethodLength">
<property name="tokens" value="METHOD_DEF"/>
<property name="max" value="150"/>
</module>
<!-- 方法的引數個數不超過5個。 並且不對構造方法進行檢查-->
<module name="ParameterNumber">
<property name="max" value="5"/>
<property name="tokens" value="METHOD_DEF"/>
</module>
<!-- 空格檢查 -->
<!-- 允許方法名後緊跟左邊圓括號"(" -->
<module name="MethodParamPad"/>
<!-- 在型別轉換時,不允許左圓括號右邊有空格,也不允許與右圓括號左邊有空格 -->
<module name="TypecastParenPad"/>
<!-- 關鍵字 -->
<!--
每個關鍵字都有正確的出現順序。比如 public static final XXX 是對一個常量的宣告。如果使用 static
public final 就是錯誤的
-->
<module name="ModifierOrder"/>
<!-- 多餘的關鍵字 -->
<module name="RedundantModifier"/>
<!-- 對區域的檢查 -->
<!-- 不能出現空白區域 -->
<module name="EmptyBlock"/>
<!-- 所有區域都要使用大括號 -->
<module name="NeedBraces"/>
<!-- 多餘的括號 -->
<module name="AvoidNestedBlocks">
<property name="allowInSwitchCase" value="true"/>
</module>
<!-- 編碼方面的檢查 -->
<!-- 不許出現空語句 -->
<module name="EmptyStatement"/>
<!-- 不允許魔法數 -->
<module name="MagicNumber">
<property name="tokens" value="NUM_DOUBLE, NUM_INT"/>
</module>
<!-- 多餘的throw -->
<module name="RedundantThrows"/>
<!-- String的比較不能用!= 和 == -->
<module name="StringLiteralEquality"/>
<!-- if最多巢狀3層 -->
<module name="NestedIfDepth">
<property name="max" value="3"/>
</module>
<!-- try最多被巢狀2層 -->
<module name="NestedTryDepth">
<property name="max" value="2"/>
</module>
<!-- clone方法必須呼叫了super.clone() -->
<module name="SuperClone"/>
<!-- finalize 必須呼叫了super.finalize() -->
<module name="SuperFinalize"/>
<!-- 不能catch java.lang.Exception -->
<module name="IllegalCatch">
<property name="illegalClassNames" value="java.lang.Exception"/>
</module>
<!-- 確保一個類有package宣告 -->
<module name="PackageDeclaration"/>
<!-- 一個方法中最多有3個return -->
<module name="ReturnCount">
<property name="max" value="3"/>
<property name="format" value="^$"/>
</module>
<!--
根據 Sun 編碼規範, class 或 interface 中的順序如下: 1.class 宣告。首先是 public,
然後是protected , 然後是 package level (不包括access modifier ) 最後是private .
(多個class放在一個java檔案中的情況) 2.變數宣告。 首先是 public, 然後是protected然後是 package
level (不包括access modifier ) 最後是private . (多個class放在一個java檔案中的情況)
3.建構函式 4.方法
-->
<module name="DeclarationOrder"/>
<!-- 同一行不能有多個宣告 -->
<module name="MultipleVariableDeclarations"/>
<!-- 不必要的圓括號 -->
<module name="UnnecessaryParentheses"/>
<!-- 雜項 -->
<!-- 禁止使用System.out.println -->
<module name="GenericIllegalRegexp">
<property name="format" value="System\.out\.println"/>
<property name="ignoreComments" value="true"/>
</module>
<!-- 檢查並確保所有的常量中的L都是大寫的。因為小寫的字母l跟數字1太象了 -->
<module name="UpperEll"/>
<!-- 檢查陣列型別的定義是String[] args,而不是String args[] -->
<module name="ArrayTypeStyle"/>
<!-- 檢查java程式碼的縮排 預設配置:基本縮排 4個空格,新行的大括號:0。新行的case 4個空格 -->
<module name="Indentation"/>
</module>
</module>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<module name="Checker">
<property name="severity" value="warning"/>
<module name="StrictDuplicateCode"
<property name="charset" value="utf-8"/>
</module>
<module name="TreeWalker">
<!-- javadoc的檢查 -->
<!-- 檢查所有的interface和class -->
<module name="JavadocType"/>
<!-- 命名方面的檢查 -->
<module name="LocalFinalVariableName"/>
<!-- 區域性的非final型的變數,包括catch中的引數的檢查 -->
<module name="LocalVariableName"/>
<!-- 包名的檢查(只允許小寫字母) -->
<module name="PackageName">
</module>
<!-- 僅僅是static型的變數(不包括static final型)的檢查 -->
<module name="StaticVariableName"/>
<!-- 型別(Class或Interface)名的檢查 -->
<module name="TypeName"/>
<!-- 非static型變數的檢查 -->
<module name="MemberName"/>
<!-- 方法名的檢查 -->
<module name="MethodName"/>
<!-- 方法的引數名 -->
<module name="ParameterName "/>
<!-- 常量名的檢查 -->
<module name="ConstantName"/>
<!-- 沒用的import檢查,比如:1.沒有被用到2.重複的3.import java.lang的4.import 與該類在同一個package的 -->
<module name="UnusedImports"/>
<!-- 長度方面的檢查 -->
<!-- 檔案長度不超過1500行 -->
<module name="FileLength">
<property name="max" value="1500"/>
</module>
<!-- 每行不超過150個字-->
<module name="LineLength">
<property name="max" value="150"/>
</module>
<!-- 方法不超過150行 -->
<module name="MethodLength">
<property name="tokens" value="METHOD_DEF"/>
<property name="max" value="150"/>
</module>
<!-- 方法的引數個數不超過5個。 並且不對構造方法進行檢查-->
<module name="ParameterNumber">
<property name="max" value="5"/>
<property name="tokens" value="METHOD_DEF"/>
</module>
<!-- 空格檢查 -->
<!-- 允許方法名後緊跟左邊圓括號"(" -->
<module name="MethodParamPad"/>
<!-- 在型別轉換時,不允許左圓括號右邊有空格,也不允許與右圓括號左邊有空格 -->
<module name="TypecastParenPad"/>
<!-- 關鍵字 -->
<!--
每個關鍵字都有正確的出現順序。比如 public static final XXX 是對一個常量的宣告。如果使用 static
public final 就是錯誤的
-->
<module name="ModifierOrder"/>
<!-- 多餘的關鍵字 -->
<module name="RedundantModifier"/>
<!-- 對區域的檢查 -->
<!-- 不能出現空白區域 -->
<module name="EmptyBlock"/>
<!-- 所有區域都要使用大括號 -->
<module name="NeedBraces"/>
<!-- 多餘的括號 -->
<module name="AvoidNestedBlocks">
<property name="allowInSwitchCase" value="true"/>
</module>
<!-- 編碼方面的檢查 -->
<!-- 不許出現空語句 -->
<module name="EmptyStatement"/>
<!-- 不允許魔法數 -->
<module name="MagicNumber">
<property name="tokens" value="NUM_DOUBLE, NUM_INT"/>
</module>
<!-- 多餘的throw -->
<module name="RedundantThrows"/>
<!-- String的比較不能用!= 和 == -->
<module name="StringLiteralEquality"/>
<!-- if最多巢狀3層 -->
<module name="NestedIfDepth">
<property name="max" value="3"/>
</module>
<!-- try最多被巢狀2層 -->
<module name="NestedTryDepth">
<property name="max" value="2"/>
</module>
<!-- clone方法必須呼叫了super.clone() -->
<module name="SuperClone"/>
<!-- finalize 必須呼叫了super.finalize() -->
<module name="SuperFinalize"/>
<!-- 不能catch java.lang.Exception -->
<module name="IllegalCatch">
<property name="illegalClassNames" value="java.lang.Exception"/>
</module>
<!-- 確保一個類有package宣告 -->
<module name="PackageDeclaration"/>
<!-- 一個方法中最多有3個return -->
<module name="ReturnCount">
<property name="max" value="3"/>
<property name="format" value="^$"/>
</module>
<!--
根據 Sun 編碼規範, class 或 interface 中的順序如下: 1.class 宣告。首先是 public,
然後是protected , 然後是 package level (不包括access modifier ) 最後是private .
(多個class放在一個java檔案中的情況) 2.變數宣告。 首先是 public, 然後是protected然後是 package
level (不包括access modifier ) 最後是private . (多個class放在一個java檔案中的情況)
3.建構函式 4.方法
-->
<module name="DeclarationOrder"/>
<!-- 同一行不能有多個宣告 -->
<module name="MultipleVariableDeclarations"/>
<!-- 不必要的圓括號 -->
<module name="UnnecessaryParentheses"/>
<!-- 雜項 -->
<!-- 禁止使用System.out.println -->
<module name="GenericIllegalRegexp">
<property name="format" value="System\.out\.println"/>
<property name="ignoreComments" value="true"/>
</module>
<!-- 檢查並確保所有的常量中的L都是大寫的。因為小寫的字母l跟數字1太象了 -->
<module name="UpperEll"/>
<!-- 檢查陣列型別的定義是String[] args,而不是String args[] -->
<module name="ArrayTypeStyle"/>
<!-- 檢查java程式碼的縮排 預設配置:基本縮排 4個空格,新行的大括號:0。新行的case 4個空格 -->
<module name="Indentation"/>
</module>
</module>