1. 程式人生 > >idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle

idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle

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的檔案,就會根據您配置的規範,提示出一系統的問題。
這裡寫圖片描述