Intellij IDEA 使用checkstyle、pmd、findbugs檢查靜態程式碼質量
阿新 • • 發佈:2018-12-15
checkstye、pmd、findbugs的對比
在IDEA setting-plugins 下分別搜尋 checkstyle、pmd、findbugs 安裝,安裝後要重啟IDEA。
- checkstyle
如上圖開啟checkstyle面板。
可以自己設定檢查規則,在setting-other setting-Checkstyle,點選右上角+號新增自己的檢查規則。下面是一個規則例子
<?xml version="1.0"?> <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> <!-- 規則版本號:V1.0(2018-05-11) 本規則重在程式設計規範,請與PMD、FindBugs結合使用 --> <module name="Checker"> <!-- 每個java檔案一個語法樹 --> <module name="TreeWalker"> <!-- Javadoc Comments2 --> <!--<module name="JavadocType"/> <module name="JavadocMethod"> <property name="scope" value="protected"/> <property name="allowMissingPropertyJavadoc " value="true"/> <property name="logLoadErrors" value="true"/> <property name="suppressLoadErrors" value="true"/> </module> <module name="JavadocVariable"> <property name="scope" value="public"/> </module> <module name="JavadocStyle"> <property name="checkFirstSentence" value="false"/> <property name="checkEmptyJavadoc" value="true"/> <property name="checkHtml" value="false"/> </module>--> <!-- Naming Conventions --> <module name="ConstantName"> <property name="format" value="(^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$)|(^log$)|(^logger$)"/> </module> <module name="LocalFinalVariableName"> <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> </module> <module name="LocalVariableName"> <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> </module> <module name="MemberName"> <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> </module> <module name="MethodName"> <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> </module> <module name="PackageName"> <property name="format" value="^[a-z]+(\.[a-zA-Z_][a-zA-Z0-9_]*)*$"/> </module> <module name="ParameterName"> <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> </module> <module name="StaticVariableName"> <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> </module> <module name="TypeName"> <property name="format" value="^[A-Z][a-zA-Z0-9]*$"/> </module> <!-- import --> <!-- 避免使用* --> <module name="AvoidStarImport"/> <!-- 檢查是否匯入了多餘的包 --> <module name="RedundantImport"/> <!-- 檢查是否從非法的包中匯入了類 --> <module name="IllegalImport"/> <!-- 沒用的import檢查 --> <module name="UnusedImports"/> <!-- Size Violations --> <!--<module name="LineLength"> <property name="max" value="120"/> </module>--> <module name="AnonInnerLength"> <property name="max" value="60"/> </module> <!-- Whitespace --> <module name="MethodParamPad"/> <module name="NoWhitespaceAfter"/> <module name="NoWhitespaceBefore"/> <module name="OperatorWrap"/> <module name="ParenPad"/> <module name="TypecastParenPad"/> <!--<module name="TabCharacter"/>--> <module name="WhitespaceAround"> <property name="tokens" value="COLON,NOT_EQUAL,QUESTION,DIV,DIV_ASSIGN,BXOR,BXOR_ASSIGN,MINUS,LCURLY,RCURLY,STAR,STAR_ASSIGN,TYPE_EXTENSION_AND,BAND,LAND,BAND_ASSIGN,MOD,MOD_ASSIGN,PLUS,PLUS_ASSIGN,LT,SL,SL_ASSIGN,LE,ASSIGN,MINUS_ASSIGN,EQUAL,GT,GE,SR,SR_ASSIGN,BSR,BSR_ASSIGN,BOR,BOR_ASSIGN,LOR,LITERAL_ASSERT,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,SLIST,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE"/> </module> <!-- Modifiers --> <module name="ModifierOrder"/> <!-- Block Checks --> <module name="EmptyBlock"/> <module name="LeftCurly"> <property name="option" value="eol"/> </module> <module name="NeedBraces"/> <module name="RightCurly"> <property name="option" value="alone"/> </module> <module name="AvoidNestedBlocks"> <property name="allowInSwitchCase" value="true"/> </module> <!-- Coding --> <!-- 檢查區域性變數或引數是否隱藏了類中的變數 --> <module name="HiddenField"> <property name="ignoreConstructorParameter" value="true"/> <property name="ignoreSetter" value="true"/> <property name="ignoreAbstractMethods" value="true"/> </module> <!-- 檢查是否有"魔鬼"數字 --> <module name="MagicNumber"> <property name="tokens" value="NUM_DOUBLE, NUM_FLOAT, NUM_LONG"/> <property name="ignoreNumbers" value="-1, 0, 1"/> </module> <!-- <module name="RedundantThrows"> <property name="logLoadErrors" value="true"/> <property name="suppressLoadErrors" value="true"/> </module>--> <module name="NestedTryDepth"> <property name="max" value="2"/> </module> <module name="IllegalThrows"/> <module name="DeclarationOrder"/> <module name="UnnecessaryParentheses"/> <!-- Class Design --> <module name="VisibilityModifier"> <property name="packageAllowed" value="true"/> <property name="protectedAllowed" value="true"/> </module> <!--<module name="HideUtilityClassConstructor"/> --> <module name="ThrowsCount"> <property name="max" value="3"/> </module> <!-- Metrics --> <module name="BooleanExpressionComplexity"> <property name="max" value="5"/> </module> <!-- Miscellaneous --> <!--<module name="Indentation"/>--> <module name="UncommentedMain"/> </module> </module>
在checkstyle面板,點選檢查按鈕進行檢查,也可以檢查單個檔案。
-
pmd的使用
-
findbugs的使用