checkstyle檢查配置文檔
本文轉載自:http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html
其它部分請參考原文
3.4 checkstyle常見提示速查
Checkstyle常見錯誤和警告提示見下表所示:
|
錯誤提示 |
錯誤說明 |
|
missing a javadoc comment |
缺少類注釋 |
|
Line longer than X characters |
行長度超過X個字符(包括空格) |
|
Return count is X(max allowed 3) |
一個方法內的返回數量是X(最大值只能為3) |
|
Nested if-else depth is X(max allowed is 3) |
最大的if-else嵌套層數為X(最大只能為3) |
|
Array brackets at illegal position |
數組的方括號“[]”的位置不正確(檢查數組類型的定義是String[] args,而不是String args[]) |
|
Line matchs the illegal pattern 'System\.out\.println' |
本行包含System.out.println語句 |
|
ctor def modifier at indentation level 8 not at corrent indentation 4 |
縮進不正確,一般是因為沒有在Eclipse中使用4個空格代替tab鍵引起。 |
|
'static' modifier out of order with the JLS suggestions |
static修飾符沒有按照JLS的建議來排序(eg.寫成public final static...應該改成public static final) |
|
Name 'X' must match pattern '^[A-Z][A-Z0-9][_A-Z0-9+]$'(正則表達式) |
名稱不符合正則表達式'^[A-Z][A-Z0-9][_A-Z0-9+]$'(即為大寫字母,數字、下劃線等)。 一般在靜態變量沒有大寫時提示,包名不是全部消息時提示,類名不是大寫開頭時提示,方法名不是小寫開頭時提示 |
|
Variable access definition in wrong order |
變量定義順序不正確(例如在類成員變量定義時,將private類型的變量定義在public類型的變量之前) |
|
Static variable definition in wrong order |
靜態變量定義順序不正確(例如在構造函數之后定義靜態變量) |
|
Instance variable definition in wrong order |
成員變量定義順序不正確(例如在構造函數之后定義成員變量) |
|
X is a magic number |
X是一個魔術數字(非0、1、2的數字) |
|
if construct must use '{}' |
if結構必須使用'{}' |
|
Got an exception - Unexpected character 0xfffd in identifier |
因為沒有設置checkstyle配置文件的charset為UTF-8,而類文件使用UTF-8編碼,并且含有中文 |
|
“{” should be on the previous line |
“{” 應該位于前一行 |
|
Methods is missing a javadoc comment |
方法前面缺少javadoc注釋 |
|
Expected @throws tag for “Exception” |
在注釋中希望有@throws的說明 |
|
“.” Is preceeded with whitespace |
“.” 前面不能有空格 |
|
“.” Is followed by whitespace |
“.” 后面不能有空格 |
|
“=” is not preceeded with whitespace“=” |
前面缺少空格 |
|
“=” is not followed with whitespace |
“=” 后面缺少空格 |
|
“}” should be on the same line |
“}” 應該與下條語句位于同一行 |
|
Unused @param tag for “unused” |
沒有參數“unused”,不需注釋 |
|
Variable “X” missing javadoc |
變量“CA”缺少javadoc注釋 |
|
Line contains a tab character |
行含有”tab” 字符 |
|
Redundant “Public” modifier |
冗余的“public” modifier |
|
final modifier out of order with the JSL suggestion |
final修飾符的順序錯誤 |
|
Avoid using the “.*” form of import |
Import格式避免使用“.*” |
|
Redundant import from the same package |
從同一個包中Import內容 |
|
Unused import-X Import |
import的X類沒有被使用 |
|
Duplicate import to line X |
重復Import同一個內容 |
|
Import from illegal package |
從非法包中 Import內容 |
|
“while” construct must use “{}” |
“while” 語句缺少“{}” |
|
Variable “X” must be private and have accessor method |
變量“X”應該是private的,并且有調用它的方法 |
|
Variable “X” must match pattern “^[a-z][a-zA-Z0-9]*$” |
變量“X”不符合命名規則“^[a-z][a-zA-Z0-9]*$” |
|
“(” is followed by whitespace |
“(” 后面不能有空格 |
|
“)” is proceeded by whitespace |
“)” 前面不能有空格 |
4、附錄
4.1 eclipse_checkstyle.xml文件內容
Checkstyle配置文件eclipse_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
>

浙公網安備 33010602011771號