checkstyle配置詳解

Checkstyle是一款檢查java程序代碼樣式的工具,可以有效的幫助我們檢視代碼以便更好的遵循代碼編寫標準,特別適用於小組開發時彼此間的樣式規範和統一。Checkstyle提供了高可配置性,以便適用於各種代碼規範,所以除了可以使用它提供的sun的代碼標準外,你也可以定製自己的標準。我們可以在eclipse中安裝checkstyle的插件,來方便我們的使用。

   Checkstyle可以讓我們養成書寫良好代碼風格的習慣,代碼的整潔也減少了很多bad smell的產生。使用checkstyle的過程中可能需要經常的調整配置文件,有些check過於嚴格,可以根據實際情況取消一些代碼檢查。

Checkstyle的配置

Checkstyle配置是通過指定modules來應用到java文件的。modules樹狀結構,以一個名爲Checkermodule作爲root節點,一般的checker都會包括TreeWalkermodule。我們可以參照checkstyle中的sun_checks.xml,這是根據sunjava語言規範寫的配置。

xml配置文件中通過modulename屬性來區分modulemoduleProperties可以控制如何去執行這個module,每個property都有一個默認值,所有的check都有一個severity屬性,用它來指定checklevelTreeWalker爲每個java文件創建一個語法樹,在節點之間調用submodulesChecks

下面來看看standard checks中的一些具體用法。

Javadoc Comments

l         JavadocPackage

檢查每個java package中是否有java註釋文件,默認是允許一個package-info.java,也可以通過allowLegacy屬性配置允許package.html

l         JavadocType

檢查類和接口的javadoc。默認不檢查author version tags

l         JavadocMethod

檢查方法和構造函數的javadoc。默認不檢查未使用的異常拋出。

l         JavadocVariable

檢查變量的javadoc

l         JavadocStyle

檢查javadoc的格式。比如:javadoc的第一行是否以句號結束,javadoc除了tags外是否有description,檢查javadoc中的html格式。

l         WriteTag

輸出javadoc中的tag

Naming Conventions

l        AbstractClassName

檢查抽象類名。

l         ClassTypeParameterName

檢查類的Parameter名。

l         ConstantName

檢查常量名。

l         LocalFinalVariableName

檢查局部的final類型變量名,包括catch的參數。

l         LocalVarableName

檢查局部的非final類型的變量名,包括catch的參數。

l         MemberName

檢查非靜態變量。

l         MethodName

檢查方法名。

l         MethodTypeParameterName

檢查方法的參數名。

l         PackageName

檢查包名。

l         ParameterName

檢查參數名。

l         StaticVariableName

檢查靜態的,非final類型的變量名。

l         TypeName

檢查類名和接口名。

Imports

l         AvoidStarImport

檢查是否有使用*進行import

l         AvoidStaticImport

檢查是否有靜態import。比如是否導入了java.lang包中的內容。

l         IllegalImport

檢查是否import了違法的包。默認拒絕import所有sun.*包。

l         RedundanImport

檢查是否有重複的import

l         UnusedImports

檢查是否有未使用的import

l         ImportOrder

檢查import的分組和順序。

l         ImportControl

控制可import的包。在一個較大的project可限制使用過多的第三方包,通過一個依照http://www.puppycrawl.com/dtds/import_control_1_0.dtd的xml文件來指定。

Size Violations

l         ExecutableStatementCount

限制可執行代碼片段的長度。默認爲30

l         FileLength

檢查java文件的長度。默認爲2000

l         LineLength

檢查代碼行的長度。默認爲80

l         MethodLength

檢查方法和構造函數的長度。默認爲150

l         AnonInnerLength

檢查匿名內部類的長度。默認爲20

l         ParameterNumber

檢查方法和構造函數的參數個數。默認爲7

Whitespace

l        GenericWhitespace

檢查<>周圍的空白。

l         EmptyForInitializerPad

檢查空的初始化位置的空白。比如for循環中的初始化。

l         EmptyForIteratorPad

檢查空的迭代位置的空白。

l         MethodParamPad

檢查方法簽名之前的空白。

l         NoWhitespaceAfter

檢查分隔符後的空白。

l         NoWhitespaceBefore

檢查分隔符前的空白。

l         OperatorWrap

檢查操作符的空白規則。

l         ParenPad

檢查圓括號的空白規則。

l         TypecaseParenPad

檢查強制轉型的圓括號的空白規則。

l         TabCharacter

檢查是否有Tab字符(’"t’)。

l         WhitespaceAfter

檢查分隔符是否在空白之後。

l         WhitespaceAround

檢查分隔符周圍是否有空白。

ModifierOrder

l         ModifierOrder

檢查修飾符的順序是否遵照java語言規範。

l         RedundantModifier

檢查接口和annotation中是否有重複的修飾符。

Block Checks

l         EmptyBlock

檢查空的代碼塊。

l         LeftCurly

檢查’{’和左邊的代碼塊是否在同一行。

l         NeedBraces

檢查是否需要大括號。主要是在ifelse時的情況。

l         RightCurly

檢查’}’

l         AvoidNestedBlocks

檢查不需要的嵌套’{}’

Coding

l         ArrayTrailingComma

檢查數組初始化是否以逗號結束。

l         AvoidInlineConditionals

檢查inline的條件操作。

l         CovariantEquals

檢查類是否覆蓋了equals(java.lang.Object)

l         DoubleCheckedLocking

檢查DCL的問題。

l         EmptyStatement

檢查空的代碼段。

l         EqualsAvoidNull

檢查一個可能爲null的字符串是否在equals()比較的左邊。

l         EqualsHashCode

檢查類是否覆蓋了equals()和hashCode()

l         FinalLocalVariable

檢查未改變過的局部變量是否聲明爲final

l         HiddenField

檢查局部變量或參數是否隱藏了類中的變量。

l         IllegalInstantiation

檢查是否使用工廠方法實例化。

l         IllegalToken

檢查非法的分隔符。

l         IllegalTokenText

檢查非法的分隔符的下個字符。

l         InnerAssignment

檢查子表達式中是否有賦值操作。

l         MagicNumber

檢查是否有“magic numbers”。

l         MissingSwitchDefault

檢查switch語句是否有defaultclause

l         ModifiedControlVariable

檢查循環控制的變量是否在代碼塊中被修改。

l         RedundantThrows

檢查是否有被重複拋出的異常。

l         SimplifyBooleanExpression

檢查是否有過度複雜的布爾表達式。

l         SimplifyBooleanReturn

檢查是否有過於複雜的布爾返回代碼段。

l         StringLiteralEquality

檢查字符串是否有用= =!=進行操作。

l         NestedIfDepth

檢查嵌套的層次深度。

l         NestedTryDepth

檢查try的層次深度。

l         NoClone

檢查是否覆蓋了clone()

l         NoFinalizer

檢查是否有定義finalize()

l         SuperClone

檢查覆蓋的clone()是否有調用super.clone()

l         SuperFinalize

檢查覆蓋的finalize()是否有調用super.finalize()

l         IllegalCatch

檢查是否catch了不能接受的錯誤。

l         IllegalThrows

檢查是否拋出了未聲明的異常。

l         PackageDeclaration

檢查類中是否有聲明package

l         JUnitTestCase

確保setUp(), tearDown()方法簽名的正確性。

l         ReturnCount

限制return代碼段的數量。

l         IllegalType

檢查未使用過的類。

l         DeclarationOrder

檢查類和接口中的聲明順序。

l         ParameterAssignment

檢查不允許的參數賦值。

l         ExplicitInitialization

檢查類和對象成員是否初始化爲默認值。

l         DefaultComesLast

檢查defaultclause是否在switch代碼段的最後。

l         MissingCtor

檢查類依賴。

l         FallThrough

檢查switch代碼的case中是否缺少breakreturnthrowcontinue

l         MultipleStringLiterals

檢查一個文件中是否有多次出現的字符串。

l         MultipleVariableDeclarations

檢查代碼段和代碼行中是否有多次變量聲明。

l         RequireThis

檢查代碼中是否有“this.”。

l         UnnecessaryParentheses

檢查是否有使用不需要的圓括號。

Class Design

l         VisibilityModifier

檢查類成員的可見度。

l         FinalClass

檢查只有private構造函數的類是否聲明爲final

l         InterfaceIsType

檢查接口是否僅定義類型。

l         HideUtilityClassConstructor

檢查工具類是否有putblic的構造器。

l         DesignForExension

檢查類是否爲擴展設計。

l         MutableException

確保異常是不可變的。

l         ThrowsCount

限制拋出異常的數量。

Duplicate Code

l         StrictDuplicateCode

嚴格檢查重複代碼。

Miscellaneous

l         GenericIllegalRegexp

正則表達式的模式檢查。

l         NewlineAtEndOfFile

檢查文件是否以一個空行結束。

l         TodoComment

檢查TODO:註釋。

l         Translation

檢查property文件中是否有相同的key

l         UncommentedMain

檢查是否有未註釋的main方法。

l         UpperEll

檢查long型約束是否有大寫的“L”。

l         ArrayTypeStyle

檢查數組類型定義的樣式。

l         FinalParameters

檢查方法名、構造函數、catch塊的參數是否是final的。

l         Indentation

檢查代碼中正確的縮進。

l         TrailingComment

確保是否要代碼行註釋。

l         RequiredRegexp

確保一個指定的正則表達式的規則已經存在代碼中。

Checkstyle常見的錯誤提示

1.       Type is missing a javadoc commentClass   

缺少類型說明

2.       “{” should be on the previous line

“{” 應該位於前一行

3.       Methods is missing a javadoc comment

方法前面缺少javadoc註釋

4.       Expected @throws tag for “Exception”

在註釋中希望有@throws的說明

5.       “.” Is preceeded with whitespace “.”

前面不能有空格

6.       “.” Is followed by whitespace“.”

後面不能有空格

7.       “=” is not preceeded with whitespace

“=” 前面缺少空格

8.       “=” is not followed with whitespace   

“=” 後面缺少空格

9.       “}” should be on the same line    

“}” 應該與下條語句位於同一行

10.    Unused @param tag for “unused”

沒有參數“unused”,不需註釋

11.    Variable “CA” missing javadoc

變量“CA”缺少javadoc註釋

12.    Line longer than 80characters   

行長度超過80

13.    Line contains a tab character

行含有”tab” 字符

14.    Redundant “Public” modifier

冗餘的“public” modifier

15.    Final modifier out of order with the JSL

suggestionFinal modifier的順序錯誤

16.    Avoid using the “.*” form of import

Import格式避免使用“.*”

17.    Redundant import from the same package

從同一個包中Import內容

18.    Unused import-java.util.list

Import進來的java.util.list沒有被使用

19.    Duplicate import to line 13

重複Import同一個內容

20.    Import from illegal package

從非法包中 Import內容

21.    “while” construct must use “{}”

“while” 語句缺少“{}”

22.    Variable “sTest1” must be private and have accessor method

變量“sTest1”應該是private的,並且有調用它的方法

23.    Variable “ABC” must match pattern “^[a-z][a-zA-Z0-9]*$”      

變量“ABC”不符合命名規則“^[a-z][a-zA-Z0-9]*$”

24.    “(” is followed by whitespace    

“(” 後面不能有空格

25.    “)” is proceeded by whitespace

“)” 前面不能有空格

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