idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle
阿新 • • 發佈:2019-02-17
CheckStyle是SourceForge下的一個專案,提供了一個幫助JAVA開發人員遵守某些編碼規範的工具。它能夠自動化程式碼規範檢查過程,從而使得開發人員從這項重要,但是枯燥的任務中解脫出來。
CheckStyle檢驗的主要內容
- 列表內容
- Javadoc註釋
- 命名約定
- 標題
- Import語句
- 體積大小
- 空白
- 修飾符
- 塊
- 程式碼問題
- 類設計
- 混合檢查(包括一些有用的比如非必須的System.out和printstackTrace)
-
下面主要介紹IDEA,如何配置,使用checkstyle
1、CheckStyle外掛安裝和使用
一,開啟settings的plugins,點選查詢CheckStyle-IDEA安裝,如果查詢不到,Browse repositories…
二,使用IDEA的外掛生效,
三、新增自己的配置檔案,要檢查的專案
四、將checkstyle.xml配置檔案貼上如下 :、
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
<!--
If you set the basedir property below, then all reported file
names will be relative to the specified directory. See
http://checkstyle.sourceforge.net/5.x/config.html#Checker
<property name="basedir" value="${basedir}"/>
-->
<!-- 檢查每個包中是否有java註釋檔案,預設有package-info.java -->
<!-- <module name="JavadocPackage"/> -->
<!-- 檢查檔案是否以一個空行結束 -->
<module name="NewlineAtEndOfFile"/>
<!-- 檢查property檔案中是否有相同的key -->
<module name="Translation"/>
<!-- 檔案長度不超過1500行 -->
<module name="FileLength">
<property name="max" value="1500"/>
</module>
<!-- 檢查檔案中是否含有'\t' -->
<module name="FileTabCharacter"/>
<!-- Miscellaneous other checks. -->
<module name="RegexpSingleline">
<property name="format" value="\s+$"/>
<property name="minimum" value="0"/>
<property name="maximum" value="0"/>
<property name="message" value="Line has trailing spaces."/>
</module>
<!-- 每個java檔案一個語法樹 -->
<module name="TreeWalker">
<!-- 註釋檢查 -->
<!-- 檢查方法和建構函式的javadoc -->
<module name="JavadocMethod">
<property name="tokens" value="METHOD_DEF" />
</module>
<!-- 檢查類和介面的javadoc。預設不檢查author和version tags -->
<module name="JavadocType"/>
<!-- 檢查變數的javadoc -->
<module name="JavadocVariable"/>
<!-- 檢查javadoc的格式 -->
<module name="JavadocStyle">
<property name="checkFirstSentence" value="false"/>
</module>
<!-- 檢查TODO:註釋 -->
<module name="TodoComment"/>
<!-- 命名檢查 -->
<!-- 區域性的final變數,包括catch中的引數的檢查 -->
<module name="LocalFinalVariableName" />
<!-- 區域性的非final型的變數,包括catch中的引數的檢查 -->
<module name="LocalVariableName" />
<!-- 包名的檢查(只允許小寫字母),預設^[a-z]+(\.[a-zA-Z_][a-zA-Z_0-9_]*)*$ -->
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
<message key="name.invalidPattern" value="包名 ''{0}'' 要符合 ''{1}''格式."/>
</module>
<!-- 僅僅是static型的變數(不包括static final型)的檢查 -->
<module name="StaticVariableName" />
<!-- Class或Interface名檢查,預設^[A-Z][a-zA-Z0-9]*$-->
<module name="TypeName">
<property name="severity" value="warning"/>
<message key="name.invalidPattern" value="名稱 ''{0}'' 要符合 ''{1}''格式."/>
</module>
<!-- 非static型變數的檢查 -->
<module name="MemberName" />
<!-- 方法名的檢查 -->
<module name="MethodName" />
<!-- 方法的引數名 -->
<module name="ParameterName " />
<!-- 常量名的檢查(只允許大寫),預設^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ -->
<module name="ConstantName" />
<!-- 定義檢查 -->
<!-- 檢查陣列型別定義的樣式 -->
<module name="ArrayTypeStyle"/>
<!-- 檢查方法名、建構函式、catch塊的引數是否是final的 -->
<!-- <module name="FinalParameters"/> -->
<!-- 檢查long型定義是否有大寫的“L” -->
<module name="UpperEll"/>
<!-- Checks for Headers -->
<!-- See http://checkstyle.sf.net/config_header.html -->
<!-- <module name="Header"> -->
<!-- The follow property value demonstrates the ability -->
<!-- to have access to ANT properties. In this case it uses -->
<!-- the ${basedir} property to allow Checkstyle to be run -->
<!-- from any directory within a project. See property -->
<!-- expansion, -->
<!-- http://checkstyle.sf.net/config.html#properties -->
<!-- <property -->
<!-- name="headerFile" -->
<!-- value="${basedir}/java.header"/> -->
<!-- </module> -->
<!-- Following interprets the header file as regular expressions. -->
<!-- <module name="RegexpHeader"/> -->
<!-- import檢查-->
<!-- 避免使用* -->
<module name="AvoidStarImport"/>
<!-- 檢查是否從非法的包中匯入了類 -->
<module name="IllegalImport"/>
<!-- 檢查是否匯入了多餘的包 -->
<module name="RedundantImport"/>
<!-- 沒用的import檢查,比如:1.沒有被用到2.重複的3.import java.lang的4.import 與該類在同一個package的 -->
<module name="UnusedImports" />
<!-- 長度檢查 -->
<!-- 每行不超過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="10" />
<property name="ignoreOverriddenMethods" value="true"/>
<property name="tokens" value="METHOD_DEF" />
</module>
<!-- 空格檢查-->
<!-- 方法名後跟左圓括號"(" -->
<module name="MethodParamPad" />
<!-- 在型別轉換時,不允許左圓括號右邊有空格,也不允許與右圓括號左邊有空格 -->
<module name="TypecastParenPad" />
<!-- Iterator -->
<!-- <module name="EmptyForIteratorPad"/> -->
<!-- 檢查尖括號 -->
<!-- <module name="GenericWhitespace"/> -->
<!-- 檢查在某個特定關鍵字之後應保留空格 -->
<module name="NoWhitespaceAfter"/>
<!-- 檢查在某個特定關鍵字之前應保留空格 -->
<module name="NoWhitespaceBefore"/>
<!-- 操作符換行策略檢查 -->
<module name="OperatorWrap"/>
<!-- 圓括號空白 -->
<module name="ParenPad"/>
<!-- 檢查分隔符是否在空白之後 -->
<module name="WhitespaceAfter"/>
<!-- 檢查分隔符周圍是否有空白 -->
<module name="WhitespaceAround"/>
<!-- 修飾符檢查 -->
<!-- 檢查修飾符的順序是否遵照java語言規範,預設public、protected、private、abstract、static、final、transient、volatile、synchronized、native、strictfp -->
<module name="ModifierOrder"/>
<!-- 檢查介面和annotation中是否有多餘修飾符,如介面方法不必使用public -->
<module name="RedundantModifier"/>
<!-- 程式碼塊檢查 -->
<!-- 檢查是否有巢狀程式碼塊 -->
<module name="AvoidNestedBlocks"/>
<!-- 檢查是否有空程式碼塊 -->
<module name="EmptyBlock"/>
<!-- 檢查左大括號位置 -->
<module name="LeftCurly"/>
<!-- 檢查程式碼塊是否缺失{} -->
<module name="NeedBraces"/>
<!-- 檢查右大括號位置 -->
<module name="RightCurly"/>
<!-- 程式碼檢查 -->
<!-- 檢查是否在同一行初始化 -->
<!-- <module name="AvoidInlineConditionals"/> -->
<!-- 檢查空的程式碼段 -->
<module name="EmptyStatement"/>
<!-- 檢查在重寫了equals方法後是否重寫了hashCode方法 -->
<module name="EqualsHashCode"/>
<!-- 檢查區域性變數或引數是否隱藏了類中的變數 -->
<module name="HiddenField">
<property name="tokens" value="VARIABLE_DEF"/>
</module>
<!-- 檢查是否使用工廠方法例項化 -->
<module name="IllegalInstantiation"/>
<!-- 檢查子表示式中是否有賦值操作 -->
<module name="InnerAssignment"/>
<!-- 檢查是否有"魔術"數字 -->
<module name="MagicNumber">
<property name="ignoreNumbers" value="0, 1"/>
<property name="ignoreAnnotation" value="true"/>
</module>
<!-- 檢查switch語句是否有default -->
<module name="MissingSwitchDefault"/>
<!-- 檢查是否有過度複雜的布林表示式 -->
<module name="SimplifyBooleanExpression"/>
<!-- 檢查是否有過於複雜的布林返回程式碼段 -->
<module name="SimplifyBooleanReturn"/>
<!-- 類設計檢查 -->
<!-- 檢查類是否為擴充套件設計l -->
<!-- <module name="DesignForExtension"/> -->
<!-- 檢查只有private建構函式的類是否宣告為final -->
<module name="FinalClass"/>
<!-- 檢查工具類是否有putblic的構造器 -->
<module name="HideUtilityClassConstructor"/>
<!-- 檢查介面是否僅定義型別 -->
<module name="InterfaceIsType"/>
<!-- 檢查類成員的可見度 -->
<module name="VisibilityModifier"/>
<!-- 其他檢查 -->
<!-- 檔案中使用了System.out.print等
<module name="GenericIllegalRegexp">
<property name="format" value="System\.out\.print"/>
</module>
<module name="GenericIllegalRegexp">
<property name="format" value="System\.exit"/>
</module>
<module name="GenericIllegalRegexp">
<property name="format" value="printStackTrace"/>
</module>-->
<!-- 程式碼質量 -->
<!-- 圈複雜度
<module name="CyclomaticComplexity">
<property name="max" value="2"/>
</module> -->
</module>
</module>
五、執行並看執行效果
點選要check的檔案,就會根據您配置的規範,提示出一系統的問題。