1. 程式人生 > >Java程式碼靜態檢查、規範、格式化和checkstyle檢查配置文件

Java程式碼靜態檢查、規範、格式化和checkstyle檢查配置文件

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