<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          還在為代碼的規(guī)范問題頭疼嗎?CheckStyle來了解一下

          共 3534字,需瀏覽 8分鐘

           ·

          2020-12-07 12:23

          公眾號關(guān)注?“GitHub今日熱榜
          設(shè)為 “星標(biāo)”,帶你挖掘更多開發(fā)神器!





          CheckStyle 是 SourceForge 下的一個(gè)項(xiàng)目,提供了一個(gè)幫助 Java 開發(fā)人員遵守某些編碼規(guī)范的工具。開發(fā)人員能夠根據(jù)已經(jīng)設(shè)置好的編碼規(guī)則來自動(dòng)地檢查自己所寫的代碼,例如:方法的命名、方法的函數(shù)、變量的命名等是否符合規(guī)范。也就是說,只要設(shè)置好了規(guī)則,CheckStyle 就可以根據(jù)規(guī)則自動(dòng)地檢查代碼中不符合要求的地方,聽上去就是一個(gè)很解放人力的工具,接下來具體地了解一下這個(gè)工具吧!


          CheckStyle?除了上面說的檢查方法、變量的命名以及方法的函數(shù)之外,還有很多可以檢驗(yàn)的內(nèi)容,例如:Javadoc 注釋,命名約定,標(biāo)題,import 語句,空白,修飾符,代碼塊以及類設(shè)計(jì)等。既然功能這么齊全,如何使用呢?


          一、下載和安裝


          CheckStyle?的下載可以去官網(wǎng)。官網(wǎng)鏈接:http://checkstyle.sourceforge.net/。


          接下來的安裝教程是基于 Eclipse 的。


          1、打開eclipse, help->Install New Software... ?? 然后填入:CheckStyle - http://eclipse-cs.sourceforge.NET/update



          2、選中上圖的兩個(gè)文件,依次點(diǎn)擊 Next -->Next,選中I accept .....,F(xiàn)inish。




          3、點(diǎn)擊 Install anyway 。



          4、點(diǎn)擊重啟,生效。



          二、導(dǎo)入?CheckStyle?規(guī)范


          CheckStyle 的規(guī)范一個(gè) xml 文件,格式可以從網(wǎng)上下載,然后根據(jù)自己的需要進(jìn)行修改。例如:


          <module?name="Checker">
          ????
          ????<property?name="charset"?value="UTF-8"?/>
          ????
          ????<property?name="severity"?value="warning"?/>
          ????
          ????<property?name="fileExtensions"?value="java, properties, xml"?/>
          ????
          ????<module?name="FileTabCharacter">
          ????????<property?name="eachLine"?value="true"?/>
          ????module>
          ?
          ????
          ????<module?name="TreeWalker">
          ????????
          ????????<module?name="OuterTypeFilename"?/>
          ????????
          ????????<module?name="IllegalTokenText">
          ????????????<property?name="tokens"?value="STRING_LITERAL, CHAR_LITERAL"?/>
          ????????????<property?name="format"
          ????????????????value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"?/>

          ????????????<property?name="message"
          ????????????????value="Consider using special escape sequence instead of octal value or Unicode escaped value."?/>

          ????????module>
          ????????
          ????????<module?name="AvoidEscapedUnicodeCharacters">
          ????????????<property?name="allowEscapesForControlCharacters"?value="true"?/>
          ????????????<property?name="allowByTailComment"?value="true"?/>
          ????????????<property?name="allowNonPrintableEscapes"?value="true"?/>
          ????????module>
          ????????
          ????????<module?name="LineLength">
          ????????????<property?name="max"?value="200"?/>
          ????????????
          ????????????<property?name="ignorePattern"
          ????????????????value="^package.*|^import.*|a href|href|http://|https://|ftp://"?/>

          ????????module>
          ????????
          ????????<module?name="AvoidStarImport"?/>
          ????????
          ????????<module?name="OneTopLevelClass"?/>
          ????????
          ????????<module?name="NoLineWrap"?/>
          ????????
          ????????<module?name="EmptyBlock">
          ????????????<property?name="option"?value="TEXT"?/>
          ????????????<property?name="tokens"
          ????????????????value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"?/>

          ????????module>
          ????????
          ????????<module?name="NeedBraces">
          ????????????
          ????????????<property?name="allowSingleLineStatement"?value="true"?/>
          ????????module>
          ????????
          ????????<module?name="LeftCurly"?/>
          ????????
          ????????<module?name="RightCurly">
          ????????????<property?name="id"?value="RightCurlySame"?/>
          ????????????<property?name="tokens"
          ????????????????value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_DO"?/>

          ????????module>
          ????????<module?name="RightCurly">
          ????????????<property?name="id"?value="RightCurlyAlone"?/>
          ????????????<property?name="option"?value="alone"?/>
          ????????????<property?name="tokens"
          ????????????????value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT, INSTANCE_INIT"?/>

          ????????module>
          ????????
          ????????<module?name="WhitespaceAround">
          ????????????<property?name="allowEmptyConstructors"?value="true"?/>
          ????????????<property?name="allowEmptyMethods"?value="true"?/>
          ????????????<property?name="allowEmptyTypes"?value="true"?/>
          ????????????<property?name="allowEmptyLoops"?value="true"?/>
          ????????????<message?key="ws.notFollowed"
          ????????????????value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"?/>

          ????????????<message?key="ws.notPreceded"
          ????????????????value="WhitespaceAround: ''{0}'' is not preceded with whitespace."?/>

          ????????module>
          ????????
          ????????<module?name="OneStatementPerLine"?/>
          ????????
          ????????<module?name="MultipleVariableDeclarations"?/>
          ????????
          ????????<module?name="ArrayTypeStyle"?/>
          ????????
          ????????<module?name="MissingSwitchDefault"?/>
          ????????
          ????????<module?name="FallThrough"?/>
          ????????
          ????????<module?name="UpperEll"?/>
          ????????
          ????????<module?name="ModifierOrder"?/>
          ????????
          ????????<module?name="EmptyLineSeparator">
          ????????????
          ????????????<property?name="allowNoEmptyLineBetweenFields"?value="true"?/>
          ????????module>
          ????????
          ????????<module?name="SeparatorWrap">
          ????????????<property?name="id"?value="SeparatorWrapDot"?/>
          ????????????<property?name="tokens"?value="DOT"?/>
          ????????????<property?name="option"?value="nl"?/>
          ????????module>
          ????????<module?name="SeparatorWrap">
          ????????????<property?name="id"?value="SeparatorWrapComma"?/>
          ????????????<property?name="tokens"?value="COMMA"?/>
          ????????????<property?name="option"?value="EOL"?/>
          ????????module>
          ????????<module?name="SeparatorWrap">
          ????????????
          ????????????<property?name="id"?value="SeparatorWrapEllipsis"?/>
          ????????????<property?name="tokens"?value="ELLIPSIS"?/>
          ????????????<property?name="option"?value="EOL"?/>
          ????????module>
          ????????<module?name="SeparatorWrap">
          ????????????
          ????????????<property?name="id"?value="SeparatorWrapArrayDeclarator"?/>
          ????????????<property?name="tokens"?value="ARRAY_DECLARATOR"?/>
          ????????????<property?name="option"?value="EOL"?/>
          ????????module>
          ????????<module?name="SeparatorWrap">
          ????????????<property?name="id"?value="SeparatorWrapMethodRef"?/>
          ????????????<property?name="tokens"?value="METHOD_REF"?/>
          ????????????<property?name="option"?value="nl"?/>
          ????????module>
          ????????
          ????????<module?name="PackageName">
          ????????????<property?name="format"?value="^[a-z]+(\.[a-z][a-z0-9]*)*$"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Package name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="TypeName">
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Type name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="MemberName">
          ????????????<property?name="format"?value="^[a-z][a-zA-Z0-9]*$"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Member name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="ParameterName">
          ????????????<property?name="format"?value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Parameter name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="LambdaParameterName">
          ????????????<property?name="format"?value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Lambda parameter name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="CatchParameterName">
          ????????????<property?name="format"?value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Catch parameter name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="LocalVariableName">
          ????????????<property?name="tokens"?value="VARIABLE_DEF"?/>
          ????????????<property?name="format"?value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Local variable name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="ClassTypeParameterName">
          ????????????<property?name="format"?value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Class type name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="MethodTypeParameterName">
          ????????????<property?name="format"?value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Method type name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="InterfaceTypeParameterName">
          ????????????<property?name="format"?value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Interface type name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="NoFinalizer"?/>
          ?
          ????????<module?name="GenericWhitespace">
          ????????????<message?key="ws.followed"
          ????????????????value="GenericWhitespace ''{0}'' is followed by whitespace."?/>

          ????????????<message?key="ws.preceded"
          ????????????????value="GenericWhitespace ''{0}'' is preceded with whitespace."?/>

          ????????????<message?key="ws.illegalFollow"
          ????????????????value="GenericWhitespace ''{0}'' should followed by whitespace."?/>

          ????????????<message?key="ws.notPreceded"
          ????????????????value="GenericWhitespace ''{0}'' is not preceded with whitespace."?/>

          ????????module>
          ????????
          ????????<module?name="Indentation">
          ????????????
          ????????????<property?name="basicOffset"?value="4"?/>
          ????????????
          ????????????<property?name="braceAdjustment"?value="0"?/>
          ????????????<property?name="caseIndent"?value="4"?/>
          ????????????<property?name="throwsIndent"?value="4"?/>
          ????????????<property?name="lineWrappingIndentation"?value="4"?/>
          ????????????<property?name="arrayInitIndent"?value="4"?/>
          ????????module>
          ????????
          ????????<module?name="AbbreviationAsWordInName">
          ????????????<property?name="ignoreFinal"?value="false"?/>
          ????????????<property?name="allowedAbbreviationLength"?value="3"?/>
          ????????module>
          ????????
          ????????<module?name="OverloadMethodsDeclarationOrder"?/>
          ????????
          ????????<module?name="VariableDeclarationUsageDistance"?/>
          ????????
          ????????<module?name="CustomImportOrder">
          ????????????
          ????????????<property?name="separateLineBetweenGroups"?value="true"?/>
          ????????????<property?name="customImportOrderRules"?value="STATIC###THIRD_PARTY_PACKAGE"?/>
          ????????module>
          ????????
          ????????<module?name="MethodParamPad"?/>
          ????????
          ????????<module?name="NoWhitespaceBefore">
          ????????????<property?name="tokens"
          ????????????????value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF"?/>

          ????????????<property?name="allowLineBreaks"?value="true"?/>
          ????????module>
          ????????
          ????????<module?name="ParenPad"?/>
          ????????
          ????????<module?name="OperatorWrap">
          ????????????<property?name="option"?value="NL"?/>
          ????????????<property?name="tokens"?value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR,
          ????????????????????LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF "
          ?/>

          ????????module>
          ????????
          ????????<module?name="AnnotationLocation">
          ????????????<property?name="id"?value="AnnotationLocationMostCases"?/>
          ????????????<property?name="tokens"
          ????????????????value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"?/>

          ????????module>
          ?
          ????????<module?name="AnnotationLocation">
          ????????????<property?name="id"?value="AnnotationLocationVariables"?/>
          ????????????<property?name="tokens"?value="VARIABLE_DEF"?/>
          ????????????<property?name="allowSamelineMultipleAnnotations"?value="true"?/>
          ????????module>
          ????????
          ????????<module?name="NonEmptyAtclauseDescription"?/>
          ????????
          ????????<module?name="JavadocTagContinuationIndentation"?/>
          ????????
          ????????<module?name="SummaryJavadoc">
          ????????????<property?name="forbiddenSummaryFragments"
          ????????????????value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"?/>

          ????????????
          ????????????<property?name="period"?value=""?/>
          ????????module>
          ????????
          ????????<module?name="JavadocParagraph"?/>
          ????????
          ????????<module?name="AtclauseOrder">
          ????????????<property?name="tagOrder"?value="@param, @return, @throws, @deprecated"?/>
          ????????????<property?name="target"
          ????????????????value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"?/>

          ????????module>
          ????????
          ????????<module?name="JavadocMethod">
          ????????????<property?name="allowMissingJavadoc"?value="true"?/>
          ????????????<property?name="scope"?value="public"?/>
          ????????????<property?name="allowMissingParamTags"?value="true"?/>
          ????????????<property?name="allowMissingThrowsTags"?value="true"?/>
          ????????????<property?name="allowMissingReturnTag"?value="true"?/>
          ????????????<property?name="minLineCount"?value="2"?/>
          ????????????<property?name="allowedAnnotations"?value="Override, Test"?/>
          ????????????<property?name="allowThrowsTagsForSubclasses"?value="true"?/>
          ????????module>
          ????????
          ????????<module?name="MethodName">
          ????????????<property?name="format"?value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"?/>
          ????????????<message?key="name.invalidPattern"
          ????????????????value="Method name ''{0}'' must match pattern ''{1}''."?/>

          ????????module>
          ????????
          ????????<module?name="SingleLineJavadoc">
          ????????????<property?name="ignoreInlineTags"?value="false"?/>
          ????????module>
          ????????
          ????????<module?name="EmptyCatchBlock">
          ????????????<property?name="exceptionVariableName"?value="expected"?/>
          ????????module>
          ????????
          ????????<module?name="CommentsIndentation"?/>
          ????module>
          module>


          三、配置


          將 xml 文件放到一個(gè)路徑下,?打開 eclipse ,新建一個(gè)規(guī)范的配置,如下所示:



          配置checkstyle,點(diǎn)OK后彈出窗確定即可。



          四、啟動(dòng)配置?


          右鍵項(xiàng)目 --> properties --> Checkstyle









          關(guān)注GitHub今日熱榜,專注挖掘好用的開發(fā)工具,致力于分享優(yōu)質(zhì)高效的工具、資源、插件等,助力開發(fā)者成長!







          點(diǎn)個(gè)在看 你最好看










          瀏覽 68
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人做爰黄 片视频免费看 | 啪啪视频免费网址 | 亚洲日逼网 | 久久丫精品久久 | 成人午夜福利 |