CheckStyle工具用于检查Java源代码是否符合编码规范。它可以找到类和方法设计问题,还能够检查代码布局和格式问题。该工程以容器方式,对checkstyle工具进行封装,并定义标准输入和输出。从而保证CodeCC平台数据解析模版化。
docker: 镜像打包文件Dockerfile路径
sdk:适配工具脚步路径
tool:工具二进制路径
third_rules: 自定义规则扩展目录
checkstye:基于开源checkstyle-8.29版本做二次开发:
打包命令:docker build -t checkstyle_scan:latest -f ./docker/Dockerfile .
{"projName":"DEVOPS_B592E10DAA9EB6DE","projectId":"codeccsvr","scanPath":"/data/iegci/test_tool/test_code/wcdstat2","language":4,"whitePathList":[],"scanType":"full","skipPaths":["./\.svn/.","./\.git/.","./\.temp/.","/wcdstat_luna/luna/src/main/webapp/.*"],"incrementalFiles":[],"openCheckers":[{"checkerName":"SeparatorWrapDot","nativeChecker":true},{"checkerName":"LineLength","nativeChecker":true,"checkerOptions":[{"checkerOptionName":"max","checkerOptionValue":"100"}]}]}
字段名 | 说明 | 举例 |
---|---|---|
projName | 项目名称 | DEVOPS_214A69F1F4F935DE |
scanPath | 待扫描的路径,此处需使用绝对路径 | /data/project/code |
whitePathList | 指定扫描路径列表(白名单) | /data/project/code/src |
scanType | 进行全量或增量检查 | full或increment |
skipPaths | 屏蔽路径正则表达式列表(黑名单) | [".*/demo/.*", ".*/protobuf/.*"] |
incrementalFiles | 增量扫描的文件清单,清单为空表示全量扫描 | ["/data/project/code/src/main.py", "/data/project/code/src/test.java"]] |
openCheckers | 打开的规则列表 | [{"checkerName":"SeparatorWrapDot","nativeChecker":true},{"checkerName":"LineLength","nativeChecker":true,"checkerOptions":[{"checkerOptionName":"max","checkerOptionValue":"100"}]}] |
checkerName | 规则名称, 参考附2 | SeparatorWrapDot |
nativeChecker | 是否工具默认规则 | true |
checkerOptions | 规则参数 | [{"checkerOptionName":"max","checkerOptionValue":"100"}] |
docker run -it checkstyle_scan:latest /bin/bash -c "cd /usr/codecc/tool_scan; python3 ./sdk/src/scan.py --input=/data/input.json --output=/data/output.json"
{"defects":[{"checkerName":"FileTabCharacter","description":"\u884c\u5185\u542b\u6709\u5236\u8868\u7b26 tab \u3002","filePath":"/data/iegci/test_tool/test_code/wcdstat2/wcdstat_luna/common/src/main/java/com/tencent/luna/common/service/redis/Redis.java","line":"24"},{"checkerName":"ModifierOrder","description":"'static' \u4fee\u9970\u7b26\u987a\u5e8f\u8fdd\u53cd JLS \u5efa\u8bae.","filePath":"/data/iegci/test_tool/test_code/wcdstat2/wcdstat_luna/common/src/main/java/com/tencent/luna/common/service/redis/Redis.java","line":"24"},{"checkerName":"FileTabCharacter","description":"\u884c\u5185\u542b\u6709\u5236\u8868\u7b26 tab \u3002","filePath":"/data/iegci/test_tool/test_code/wcdstat2/wcdstat_luna/common/src/main/java/com/tencent/luna/common/service/redis/Redis.java","line":"25"}]}
字段名 | 说明 |
---|---|
defects | 告警列表 |
filePath | 文件路径 |
line | 文件行 |
checkerName | 规则名称 |
description | 规则描述 |
以下为语言对应数字,如果项目存在多语言,则数字相加:
数字 | 对应语言 |
---|---|
1 | cs |
2 | cpp |
4 | java |
8 | php |
16 | objectivec |
32 | python |
64 | js |
128 | ruby |
512 | go |
1024 | swift |
4096 | kotlin |
规则名 | 规则描述 | 适用语言 |
---|---|---|
AbbreviationAsWordInName | The Check validate abbreviations(consecutive capital letters) length in identifier name, it also allow in enforce camel case naming. | JAVA |
AbstractClassName | Ensures that the names of abstract classes conforming to some regular expression and check that abstract modifier exists. | JAVA |
AnnotationLocation | Check location of annotation on language elements. | JAVA |
AnnotationLocationMostCases | Check location of annotation on language elements. | JAVA |
AnnotationLocationVariables | Check location of annotation on language elements. | JAVA |
AnnotationOnSameLine | The check does verifying that annotations are located on the same line with their targets. | JAVA |
AnnotationUseStyle | This check controls the style with the usage of annotations. | JAVA |
AnonInnerLength | Checks for long anonymous inner classes. | JAVA |
ArrayTrailingComma | Checks if array initialization contains optional trailing comma. | JAVA |
ArrayTypeStyle | Checks the style of array type definitions. | JAVA |
AtclauseOrder | Checks the order of at-clauses. | JAVA |
AvoidEscapedUnicodeCharacters | Restrict using Unicode escapes. | JAVA |
AvoidInlineConditionals | Detects inline conditionals. | JAVA |
AvoidNestedBlocks | Finds nested blocks. | JAVA |
AvoidStarImport | Check that finds import statements that use the * notation. | JAVA |
AvoidStaticImport | Check that finds static imports. | JAVA |
BooleanExpressionComplexity | Restricts nested boolean operators (&&, | |
CatchParameterName | Checks that catch parameter names conform to a format specified by the format property. | JAVA |
ClassDataAbstractionCoupling | This metric measures the number of instantiations of other classes within the given class. | JAVA |
ClassFanOutComplexity | The number of other classes a given class relies on. | JAVA |
ClassTypeParameterName | Checks that class type parameter names conform to a format specified by the format property. | JAVA |
CommentRatioCheck | Checks for a minimum comment ratio(the threshold is 10%). | JAVA |
CommentsIndentation | Controls the indentation between comments and surrounding code. | JAVA |
ConstantName | Checks that constant names conform to a format specified by the format property. | JAVA |
CovariantEquals | Checks that if a class defines a covariant method equals, then it defines method equals(java.lang.Object). | JAVA |
CustomImportOrder | Checks that the groups of import declarations appear in the order specified by the user. | JAVA |
CyclomaticComplexity | Checks cyclomatic complexity against a specified limit. | JAVA |
DeclarationOrder | Checks that the parts of a class or interface declaration appear in the order suggested by the Code Conventions for the Java Programming Language. | JAVA |
DefaultComesLast | Check that the default is after all the cases in a switch statement. | JAVA |
DescendantToken | Checks for restricted tokens beneath other tokens. | JAVA |
DesignForExtension | Checks that classes are designed for inheritance. | JAVA |
EmptyBlock | Checks for empty blocks but does not validate sequential blocks. | JAVA |
EmptyCatchBlock | Checks for empty catch blocks with few options to skip violation. | JAVA |
EmptyForInitializerPad | Checks the padding of an empty for initializer; that is whether a space is required at an empty for initializer, or such spaces are forbidden. | JAVA |
EmptyForIteratorPad | Checks the padding of an empty for iterator; that is whether a space is required at an empty for iterator, or such spaces are forbidden. | JAVA |
EmptyLineSeparator | Checks for blank line separators. | JAVA |
EmptyStatement | Detects empty statements (standalone ';'). | JAVA |
EqualsAvoidNull | Checks that any combination of String literals is on the left side of an equals() comparison. | JAVA |
EqualsHashCode | Checks that classes that override equals() also override hashCode(). | JAVA |
EscapeSequence | 对于具有特殊转义序列的任何字符(\b, \t, \n, \f, \r, ", '及),我们使用它的转义序列,而不是相应的八进制(比如\012)或Unicode(比如\u000a)转义。 | JAVA |
ExecutableStatementCount | Restricts the number of executable statements to a specified limit (default = 30). | JAVA |
ExplicitInitialization | Checks if any class or object member explicitly initialized to default for its type value (null for object references, zero for numeric types and char and false for boolean. | JAVA |
FallThrough | Checks for fall through in switch statements Finds locations where a case contains Java code - but lacks a break, return, throw or continue statement. | JAVA |
FileEncodingCheck | Checks source files are encoded in UTF-8. | JAVA |
FileLength | Checks for long source files. | JAVA |
FileTabCharacter | Checks to see if a file contains a tab character. | JAVA |
FinalClass | Checks that class which has only private constructors is declared as final. | JAVA |
FinalLocalVariable | Ensures that local variables that never get their values changed, must be declared final. | JAVA |
FinalParameters | Check that method/constructor/catch/foreach parameters are final. | JAVA |
GenericWhitespace | Checks that the whitespace around the Generic tokens < and > are correct to the typical convention. | JAVA |
Header | Checks the header of the source against a fixed header file. | JAVA |
HiddenField | Checks that a local variable or a parameter does not shadow a field that is defined in the same class. | JAVA |
HideUtilityClassConstructor | Make sure that utility classes (classes that contain only static methods) do not have a public constructor. | JAVA |
IllegalCatch | Catching java.lang.Exception, java.lang.Error or java.lang.RuntimeException is almost never acceptable. | JAVA |
IllegalImport | Checks for imports from a set of illegal packages. | JAVA |
IllegalInstantiation | Checks for illegal instantiations where a factory method is preferred. | JAVA |
IllegalThrows | Throwing java.lang.Error or java.lang.RuntimeException is almost never acceptable. | JAVA |
IllegalToken | Checks for illegal tokens. | JAVA |
IllegalTokenText | Checks for illegal token text. | JAVA |
IllegalType | Checks that particular classes or interfaces are never used. | JAVA |
ImportOrder | Ensures that groups of imports come in a specific order. | JAVA |
Indentation | Checks correct indentation of Java Code. | JAVA |
InnerAssignment | Checks for assignments in subexpressions, such as in String s = Integer.toString(i = 2);. | JAVA |
InnerTypeLast | Check nested (internal) classes/interfaces are declared at the bottom of the class after all method and field declarations. | JAVA |
InterfaceIsType | Implements Bloch, Effective Java, Item 17 - Use Interfaces only to define types. | JAVA |
InterfaceTypeParameterName | Checks that interface type parameter names conform to a format specified by the format property. | JAVA |
InvalidJavadocPosition | Checks that Javadocs are located at the correct position. | JAVA |
JavaNCSS | This check calculates the Non Commenting Source Statements (NCSS) metric for Java source files and methods. | JAVA |
JavadocMethod | Checks the Javadoc of a method or constructor. | JAVA |
JavadocPackage | Checks that all packages have a package documentation. | JAVA |
JavadocParagraph | Checks Javadoc paragraphs. | JAVA |
JavadocStyle | Custom Checkstyle Check to validate Javadoc. | JAVA |
JavadocTagContinuationIndentation | Checks the indentation of the continuation lines in at-clauses. | JAVA |
JavadocType | Checks the Javadoc of a type. | JAVA |
JavadocVariable | Checks that a variable has Javadoc comment. | JAVA |
LambdaParameterName | Check to verify lambda parameter names. | JAVA |
LeftCurly | Checks the placement of left curly braces on types, methods and other blocks: | JAVA |
LicenseCheck | Checks license headers are present in source files. | JAVA |
LineLength | Checks for long lines. | JAVA |
LineLength-tosa | Checks for long lines(the default threshold is 120). | JAVA |
LineSeparatorCheck | Checks correct line separator style(use LF, no CR). | JAVA |
LocalFinalVariableName | Checks that local final variable names conform to a format specified by the format property. | JAVA |
LocalVariableName | Checks that local, non-final variable names conform to a format specified by the format property. | JAVA |
MagicNumber | Checks for magic numbers. | JAVA |
MemberName | Checks that instance variable names conform to a format specified by the format property. | JAVA |
MethodCount | Checks the number of methods declared in each type declaration by access modifier or total count. | JAVA |
MethodLength | Checks for long methods(the default threshold is 150). | JAVA |
MethodName | Checks that method names conform to a format specified by the format property. | JAVA |
MethodName-tosa | Checks that method names conform to a format specified by the format property(The function name has no more than 35 characters). | JAVA |
MethodParamPad | Checks the padding between the identifier of a method definition, constructor definition, method call, or constructor invocation; and the left parenthesis of the parameter list. | JAVA |
MethodTypeParameterName | Checks that class type parameter names conform to a format specified by the format property. | JAVA |
MissingCtor | Checks that classes (except abstract one) define a ctor and don't rely on the default one. | JAVA |
MissingDeprecated | This class is used to verify that both the java.lang.Deprecated annotation is present and the @deprecated Javadoc tag is present when either is present. | JAVA |
MissingJavadocMethod | Checks for missing Javadoc comments for a method or constructor. | JAVA |
MissingOverride | This class is used to verify that the java.lang.Override annotation is present when the {@inheritDoc} javadoc tag is present. | JAVA |
MissingSwitchDefault | Checks that switch statement has "default" clause. | JAVA |
ModifiedControlVariable | Check for ensuring that for loop control variables are not modified inside the for block. | JAVA |
ModifierOrder | Checks that the order of modifiers conforms to the suggestions in the Java Language specification, sections 8.1.1, 8.3.1 and 8.4.3. | JAVA |
MultipleStringLiterals | Checks for multiple occurrences of the same string literal within a single file. | JAVA |
MultipleVariableDeclarations | Checks that each variable declaration is in its own statement and on its own line. | JAVA |