JAVA静态代码审查之checkstyle
Posted 王云十三
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA静态代码审查之checkstyle相关的知识,希望对你有一定的参考价值。
技术总监来巡查,刚巧前段时间遇到了一个问题还没解决,就拉着大牛开问。结果,问题是解决了,还附带了另一个问题,或是要求出来,没啥技术含量,但是很麻烦的一个东西:代码格式。
之前我写代码,因为屏幕比较小,所以就尽量一行写的不写两行,每一行都是一个逻辑片段,后期审阅时超级方便,但“这只是我自己的习惯而已”,可我觉着这么写,超级爽啊!但是,但是,但是,技术总监严厉要求,要按照公司自己的一套标准来写。
后来我自己也想了下,我这么写的原因是,自己开发的笔记本的屏幕比较小,代码看不全所以才这么来的,可是,别人,特别是后期的运维人员在进行操作时,他们的机器情况跟我的完全不一样啊,万一他们的是90英寸超级大屏呢?想象一下,我的代码就漂浮在屏幕的最上边,想一条虫子,难看至极。
哎,好吧,咱哥们还是按照公司的要求来吧,万一这个项目的接盘侠是个武力至上的人,那就等着被提刀满街追了。
废话说了好多,就是心里不爽吐吐槽,现在,把一套checkstyle标准贴出来,以备后来装逼用。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> 3 4 <!-- 5 This configuration file was written by the eclipse-cs plugin configuration editor 6 --> 7 <!-- 8 Checkstyle-Configuration: Vastio Checks 9 Description: none 10 --> 11 <module name="Checker"> 12 <property name="severity" value="warning"/> 13 <module name="TreeWalker"> 14 <module name="JavadocMethod"> 15 <property name="severity" value="ignore"/> 16 <property name="suppressLoadErrors" value="true"/> 17 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 18 </module> 19 <module name="JavadocType"> 20 <property name="severity" value="ignore"/> 21 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 22 </module> 23 <module name="JavadocVariable"> 24 <property name="severity" value="ignore"/> 25 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 26 </module> 27 <module name="ConstantName"> 28 <property name="applyToPrivate" value="false"/> 29 </module> 30 <module name="LocalFinalVariableName"/> 31 <module name="LocalVariableName"/> 32 <module name="MemberName"/> 33 <module name="MethodName"/> 34 <module name="PackageName"/> 35 <module name="ParameterName"/> 36 <module name="StaticVariableName"/> 37 <module name="TypeName"/> 38 <module name="AvoidStarImport"/> 39 <module name="IllegalImport"/> 40 <module name="RedundantImport"/> 41 <module name="UnusedImports"/> 42 <module name="MethodLength"/> 43 <module name="ParameterNumber"/> 44 <module name="LineLength"> 45 <property name="max" value="160"/> 46 <property name="tabWidth" value="4"/> 47 </module> 48 <module name="EmptyForIteratorPad"/> 49 <module name="MethodParamPad"/> 50 <module name="NoWhitespaceAfter"/> 51 <module name="NoWhitespaceBefore"/> 52 <module name="OperatorWrap"/> 53 <module name="ParenPad"/> 54 <module name="TypecastParenPad"/> 55 <module name="WhitespaceAfter"/> 56 <module name="WhitespaceAround"> 57 <property name="tokens" value="BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND,WILDCARD_TYPE"/> 58 </module> 59 <module name="ModifierOrder"/> 60 <module name="RedundantModifier"/> 61 <module name="AvoidNestedBlocks"/> 62 <module name="EmptyBlock"/> 63 <module name="LeftCurly"/> 64 <module name="NeedBraces"/> 65 <module name="RightCurly"/> 66 <module name="AvoidInlineConditionals"/> 67 <module name="EmptyStatement"/> 68 <module name="EqualsHashCode"/> 69 <module name="HiddenField"> 70 <property name="ignoreConstructorParameter" value="true"/> 71 <property name="ignoreSetter" value="true"/> 72 </module> 73 <module name="IllegalInstantiation"> 74 <property name="classes" value="java.lang.Boolean"/> 75 </module> 76 <module name="InnerAssignment"/> 77 <module name="MissingSwitchDefault"/> 78 <module name="RedundantThrows"> 79 <property name="severity" value="ignore"/> 80 <property name="suppressLoadErrors" value="true"/> 81 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 82 </module> 83 <module name="SimplifyBooleanExpression"/> 84 <module name="SimplifyBooleanReturn"/> 85 <module name="FinalClass"/> 86 <module name="HideUtilityClassConstructor"/> 87 <module name="InterfaceIsType"/> 88 <module name="VisibilityModifier"/> 89 <module name="ArrayTypeStyle"/> 90 <module name="TodoComment"/> 91 <module name="UpperEll"/> 92 <module name="OperatorWrap"/> 93 </module> 94 <module name="JavadocPackage"> 95 <property name="severity" value="ignore"/> 96 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 97 </module> 98 <module name="NewlineAtEndOfFile"/> 99 <module name="Translation"/> 100 <module name="FileLength"/> 101 <module name="FileTabCharacter"> 102 <property name="severity" value="ignore"/> 103 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 104 </module> 105 <module name="RegexpSingleline"> 106 <property name="format" value="\s+$"/> 107 <property name="message" value="Line has trailing spaces."/> 108 </module> 109 </module>
具体的代码含义懒得分析了,直接拿来用就ok了。
附上用法:
Eclipse 或者 IntelliJ IDEA 等 IDE 中有对应的 Plugin。可搜索相应的 Plugin Market 安装。
以 IntelliJ IDEA 为例。
菜单选择 File>Setting,Plugins 选项卡中搜索 checkstyle 与 findbugs 进行安装。安装可能需要FQ,可也去IDEA官网的插件页面里去下载,然后手动添加到IDEA中去。
菜单选择 File>Setting, Other Settings 中,会有安装后的Plugin的选项。
CheckStyle 选项中新增 Configuration File, 选择 "Use a local CheckStyle file", File: 中选择本项目中的 checkstyle.xml 文件,Description 随意命名,比如 "Vastio Java Style"。
将新增加的 Configuration File 设为 Active。
最后,确认一下 Setting 中的 Editor:Inspections:CheckStyle 中的 Real-time scan 是打开的。
以上是关于JAVA静态代码审查之checkstyle的主要内容,如果未能解决你的问题,请参考以下文章
代码静态分析工具--PMD,Findbugs,CheckStyle