forked from nus-cs2103-AY2122S2/ip
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add checkstyle tests to ensure coding standard
- Loading branch information
Showing
2 changed files
with
408 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,398 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE module PUBLIC | ||
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" | ||
"https://checkstyle.org/dtds/configuration_1_3.dtd"> | ||
|
||
<!-- | ||
This configuration file enforces rules for a modified version of the module's code standard at | ||
https://oss-generic.github.io/process/codingstandards/coding-standards-java.html | ||
--> | ||
|
||
<module name="Checker"> | ||
|
||
<module name="FileTabCharacter"> | ||
<!-- Checks that there are no tab characters in the file. --> | ||
</module> | ||
|
||
<module name="NewlineAtEndOfFile"> | ||
<!-- Accept LF, CR or CRLF to accomodate devs who prefer different line endings --> | ||
<property name="lineSeparator" value="lf_cr_crlf"/> | ||
</module> | ||
|
||
<module name="RegexpSingleline"> | ||
<!-- Checks that FIXME is not used in comments. TODO is preferred. --> | ||
<property name="format" value="((//.*)|(\*.*))FIXME" /> | ||
<property name="message" value='TODO is preferred to FIXME."' /> | ||
</module> | ||
|
||
<module name="SuppressionFilter"> | ||
<property name="file" value="${config_loc}/suppressions.xml"/> | ||
</module> | ||
|
||
<module name="LineLength"> | ||
<!-- Checks if a line is too long. --> | ||
<property name="max" value="120"/> | ||
</module> | ||
|
||
<!-- All Java AST specific tests live under TreeWalker module. --> | ||
<module name="TreeWalker"> | ||
|
||
<!-- Required to allow exceptions in code style --> | ||
<module name="SuppressionCommentFilter"> | ||
<property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/> | ||
<property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/> | ||
<property name="checkFormat" value="$1"/> | ||
</module> | ||
|
||
<!-- | ||
IMPORT CHECKS | ||
--> | ||
|
||
<!-- Checks the ordering of import statements follow the rules that the default Eclipse formatter uses. | ||
The order rule "STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE" consists of: | ||
1. STATIC: static imports | ||
2. STANDARD_JAVA_PACKAGE: standard java/javax imports | ||
3. SPECIAL_IMPORTS: defined as org imports | ||
4. THIRD_PARTY_PACKAGE: defined as com imports | ||
--> | ||
<module name="CustomImportOrder"> | ||
<property name="customImportOrderRules" | ||
value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/> | ||
<property name="specialImportsRegExp" value="^org\."/> | ||
<property name="thirdPartyPackageRegExp" value="^com\."/> | ||
<property name="sortImportsInGroupAlphabetically" value="true"/> | ||
</module> | ||
|
||
<!-- Checks for redundant import statements. | ||
An import statement is redundant if: | ||
* It is a duplicate of another import. This is, when a class is imported more than once. | ||
* The class non-statically imported is from the java.lang package, e.g. importing java.lang.String. | ||
* The class non-statically imported is from the same package as the current package. | ||
--> | ||
<module name="RedundantImport"/> | ||
|
||
<!-- Checks for unused import statements. | ||
An import statement is unused if: | ||
It's not referenced in the file. | ||
--> | ||
<module name="UnusedImports"/> | ||
|
||
<module name="AvoidStarImport"/> | ||
|
||
<!-- | ||
NAMING CHECKS | ||
--> | ||
|
||
<!-- Validate abbreviations (consecutive capital letters) length in identifier name --> | ||
<module name="AbbreviationAsWordInName"> | ||
<property name="ignoreFinal" value="false"/> | ||
<property name="allowedAbbreviationLength" value="1"/> | ||
</module> | ||
|
||
<module name="PackageName"> | ||
<!-- Validates identifiers for package names against the supplied expression. --> | ||
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<module name="TypeName"> | ||
<!-- Validates static, final fields against the expression "^[A-Z][a-zA-Z0-9]*$". --> | ||
<metadata name="altname" value="TypeName"/> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<module name="ConstantName"> | ||
<!-- Validates non-private, static, final fields against the expression "^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$". --> | ||
<metadata name="altname" value="ConstantName"/> | ||
<property name="applyToPrivate" value="false"/> | ||
<message key="name.invalidPattern" | ||
value="Variable ''{0}'' should be in ALL_CAPS (if it is a constant) or be private (otherwise)."/> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<module name="StaticVariableName"> | ||
<!-- Validates static, non-final fields against the supplied expression. --> | ||
<metadata name="altname" value="StaticVariableName"/> | ||
<property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<module name="MemberName"> | ||
<!-- Validates non-static members against the supplied expression. --> | ||
<metadata name="altname" value="MemberName"/> | ||
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<module name="MethodName"> | ||
<!-- Validates identifiers for method names against the supplied expression. --> | ||
<metadata name="altname" value="MethodName"/> | ||
<property name="format" value="^[a-z][a-zA-Z0-9]*(_[a-z][a-zA-Z0-9]+){0,2}$"/> | ||
</module> | ||
|
||
<module name="ParameterName"> | ||
<!-- Validates identifiers for method parameters against the expression "^[a-z][a-zA-Z0-9]*$". --> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<module name="LocalFinalVariableName"> | ||
<!-- Validates identifiers for local final variables against the expression "^[a-z][a-zA-Z0-9]*$". --> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<module name="LocalVariableName"> | ||
<!-- Validates identifiers for local variables against the expression "^[a-z][a-zA-Z0-9]*$". --> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
|
||
<!-- | ||
LENGTH and CODING CHECKS | ||
--> | ||
|
||
<!-- Checks that array type declarations follow Java Style | ||
Java style: public static void main(String[] args) // Allowed | ||
C style: public static void main(String args[]) // Not allowed | ||
--> | ||
<module name="ArrayTypeStyle"/> | ||
|
||
<!-- Checks if a catch block is empty and does not contain any comments. --> | ||
<module name="EmptyCatchBlock"/> | ||
|
||
<module name="LeftCurly"> | ||
<!-- Checks for placement of the left curly brace ('{'). --> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<module name="RightCurly"> | ||
<!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on | ||
the same line. e.g., the following example is fine: | ||
<pre> | ||
if { | ||
... | ||
} else | ||
</pre> | ||
--> | ||
<!-- This next example is not fine: | ||
<pre> | ||
if { | ||
... | ||
} | ||
else | ||
</pre> | ||
--> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<!-- Checks for braces around loop blocks --> | ||
<module name="NeedBraces"> | ||
<!-- | ||
if (true) return 1; // Not allowed | ||
if (true) { return 1; } // Not allowed | ||
else if { | ||
return 1; // else if should always be multi line | ||
} | ||
if (true) | ||
return 1; // Not allowed | ||
--> | ||
<property name="allowEmptyLoopBody" value="true"/> | ||
</module> | ||
|
||
<!-- Checks that each variable declaration is in its own statement and on its own line. --> | ||
<module name="MultipleVariableDeclarations"/> | ||
|
||
<module name="OneStatementPerLine"/> | ||
|
||
<!-- Checks that long constants are defined with an upper ell.--> | ||
<module name="UpperEll" /> | ||
|
||
<module name="FallThrough"> | ||
<!-- Warn about falling through to the next case statement. Similar to | ||
javac -Xlint:fallthrough, but the check is suppressed if a single-line comment | ||
on the last non-blank line preceding the fallen-into case contains 'fall through' (or | ||
some other variants which we don't publicized to promote consistency). | ||
--> | ||
<property name="reliefPattern" | ||
value="fall through|Fall through|fallthru|Fallthru|falls through|Falls through|fallthrough|Fallthrough|No break|NO break|no break|continue on"/> | ||
</module> | ||
|
||
<module name="MissingSwitchDefault"/> | ||
|
||
<!-- Checks that Class variables should never be declared public. --> | ||
<module name="VisibilityModifier"> | ||
<property name="protectedAllowed" value="true"/> | ||
<property name="allowPublicFinalFields" value="true"/> | ||
<property name="ignoreAnnotationCanonicalNames" value="RegisterExtension, TempDir"/> | ||
</module> | ||
|
||
<!-- | ||
ORDER CHECKS | ||
--> | ||
|
||
<!-- Checks that the order of at-clauses follows the tagOrder default property value order. | ||
@author, @version, @param, @return, @throws, @exception, @see, @since, @serial, @serialField, @serialData, @deprecated | ||
--> | ||
<module name="AtclauseOrder"/> | ||
|
||
<!-- Checks if the Class and Interface declarations is organized in this order | ||
1. Class (static) variables. Order: public, protected, package level (no access modifier), private. | ||
2. Instance variables. Order: public, protected, package level (no access modifier), private. | ||
3. Constructors | ||
4. Methods | ||
--> | ||
<module name ="DeclarationOrder"/> | ||
|
||
<module name="ModifierOrder"> | ||
<!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and | ||
8.4.3. The prescribed order is: | ||
public, protected, private, abstract, static, final, transient, volatile, | ||
synchronized, native, strictfp | ||
--> | ||
</module> | ||
|
||
<module name="OverloadMethodsDeclarationOrder"/> | ||
|
||
<!-- | ||
WHITESPACE CHECKS | ||
--> | ||
|
||
<!-- Checks that comments are indented relative to their position in the code --> | ||
<module name="CommentsIndentation"/> | ||
|
||
<module name="WhitespaceAround"> | ||
<!-- Checks that various tokens are surrounded by whitespace. | ||
This includes most binary operators and keywords followed | ||
by regular or curly braces. | ||
--> | ||
<property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR, | ||
BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, | ||
EQUAL, GE, GT, LAND, LCURLY, LE, 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_ASSIGN, STAR, STAR_ASSIGN"/> | ||
<!-- Allow empty constructors e.g. MyClass() {} --> | ||
<property name="allowEmptyConstructors" value="true" /> | ||
<!-- Allow empty methods e.g. void func() {} --> | ||
<property name="allowEmptyMethods" value="true" /> | ||
<!-- Allow empty types e.g. class Foo {}, enum Foo {} --> | ||
<property name="allowEmptyTypes" value="true" /> | ||
<!-- Allow empty loops e.g. for (int i = 1; i > 1; i++) {} --> | ||
<property name="allowEmptyLoops" value="true" /> | ||
<!-- Allow empty lambdas e.g. () -> {} --> | ||
<property name="allowEmptyLambdas" value="true" /> | ||
</module> | ||
|
||
<module name="WhitespaceAfter"> | ||
<!-- Checks that commas, semicolons and typecasts are followed by whitespace. --> | ||
<property name="tokens" value="COMMA, SEMI, TYPECAST"/> | ||
</module> | ||
|
||
<module name="NoWhitespaceAfter"> | ||
<!-- Checks that there is no whitespace after various unary operators. Linebreaks are allowed. --> | ||
<property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS, | ||
UNARY_PLUS"/> | ||
<property name="allowLineBreaks" value="true"/> | ||
</module> | ||
|
||
<!-- No trailing whitespace --> | ||
<module name="Regexp"> | ||
<property name="format" value="[ \t]+$"/> | ||
<property name="illegalPattern" value="true"/> | ||
<property name="message" value="Trailing whitespace"/> | ||
</module> | ||
|
||
<module name="OperatorWrap"> | ||
<!-- Checks that the non-assignment type operator is at the next line in a line wrap. | ||
This includes "?", ":", "==", "!=", "/", "+", "-", "*", "%", ">>", ">>>", | ||
">=", ">", "<<", "<=", "<", "^", "|", "||", "&", "&&", "instanceof", | ||
"&" when used in a generic upper or lower bounds constraints, | ||
e.g. <T extends Foo & Bar> | ||
"::" when used as a reference to a method or constructor without arguments. | ||
e.g. String::compareToIgnoreCase | ||
--> | ||
<property name="tokens" value="QUESTION, COLON, EQUAL, NOT_EQUAL, DIV, PLUS, MINUS, STAR, MOD, SR, BSR, | ||
GE, GT, SL, LE, LT, BXOR, BOR, LOR, BAND, LAND, LITERAL_INSTANCEOF, TYPE_EXTENSION_AND, METHOD_REF"/> | ||
<property name="option" value="nl"/> | ||
</module> | ||
<module name="OperatorWrap"> | ||
<!-- Checks that the assignment type operator is at the previous end of line in a line wrap. | ||
This includes "=", "/=", "+=", "-=", "*=", "%=", ">>=", ">>>=", "<<=", "^=", "&=". | ||
--> | ||
<property name="tokens" value="ASSIGN, DIV_ASSIGN, PLUS_ASSIGN, MINUS_ASSIGN, STAR_ASSIGN, MOD_ASSIGN, | ||
SR_ASSIGN, BSR_ASSIGN, SL_ASSIGN, BXOR_ASSIGN, BOR_ASSIGN, BAND_ASSIGN"/> | ||
<property name="option" value="eol"/> | ||
</module> | ||
|
||
<module name="SeparatorWrap"> | ||
<!-- Checks that the ".", "@" is at the next line in a line wrap. --> | ||
<property name="tokens" value="DOT, AT"/> | ||
<property name="option" value="nl"/> | ||
</module> | ||
<module name="SeparatorWrap"> | ||
<!-- Checks that the ",", "]", "[", "...", ";", "(" is at the previous end of line in a line wrap. --> | ||
<property name="tokens" value="COMMA, RBRACK, ARRAY_DECLARATOR, ELLIPSIS, SEMI, LPAREN"/> | ||
<property name="option" value="eol"/> | ||
</module> | ||
|
||
<module name="Indentation"> | ||
<property name="caseIndent" value="0" /> | ||
</module> | ||
|
||
<module name="NoWhitespaceBefore"> | ||
<!-- Checks that there is no whitespace before various unary operators. Linebreaks are allowed. --> | ||
<property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/> | ||
<property name="allowLineBreaks" value="true"/> | ||
</module> | ||
|
||
<module name="ParenPad"> | ||
<!-- Checks that there is no whitespace before close parenthesis or after open parenthesis. --> | ||
<property name="severity" value="warning"/> | ||
</module> | ||
|
||
<!-- Checks that non-whitespace characters are separated by no more than one whitespace character. | ||
a = 1; // Allowed | ||
a = 1; // Not allowed (more than one space before =) | ||
--> | ||
<module name="SingleSpaceSeparator"> | ||
<!-- Validate whitespace surrounding comments as well. | ||
a = 1; // Allowed (single space before start of comment) | ||
a = 1; /* Allowed (single space before start of comment) */ | ||
/* Allowed (single space after end of comment) */ a = 1; | ||
a = 1; // Not allowed (more than one space before start of comment) | ||
a = 1; /* Not allowed (more than one space before start of comment) */ | ||
/* Not allowed (more than one space after end of comment) */ a = 1; | ||
This doesn't validate whitespace within comments so a comment /* like this */ is allowed. | ||
--> | ||
<property name="validateComments" value="true"/> | ||
</module> | ||
|
||
<!-- | ||
JAVADOC CHECKS | ||
--> | ||
|
||
<!-- Checks that every class, enumeration and interface have a header comment. --> | ||
<module name="JavadocType"> | ||
<property name="allowMissingParamTags" value="true"/> | ||
</module> | ||
|
||
<!-- Checks that every public method (excluding getters, setters and constructors) has a header comment. --> | ||
<module name="JavadocMethod"> | ||
<property name="allowedAnnotations" value="Override, Test, BeforeAll, BeforeEach, AfterAll, AfterEach, Subscribe"/> | ||
<property name="scope" value="public"/> | ||
<property name="validateThrows" value="false"/> | ||
<property name="allowMissingParamTags" value="true"/> | ||
<property name="allowMissingReturnTag" value="true"/> | ||
<property name="tokens" value="METHOD_DEF, ANNOTATION_FIELD_DEF"/> | ||
</module> | ||
|
||
<module name="InvalidJavadocPosition"/> | ||
|
||
<module name="MissingJavadocMethodCheck"> | ||
<property name="minLineCount" value="1"/> | ||
<property name="allowMissingPropertyJavadoc" value="true"/> | ||
<property name="ignoreMethodNamesRegex" value="(set.*|get.*)"/> | ||
</module> | ||
|
||
</module> | ||
</module> |
Oops, something went wrong.