Skip to content

Latest commit

 

History

History
127 lines (127 loc) · 37.3 KB

available-rules.md

File metadata and controls

127 lines (127 loc) · 37.3 KB
Chap Standard Rule name Description Fix Config FixMe
1 1.1.1 CONFUSING_IDENTIFIER_NAMING Check: warns if identifier has inappropriate name (See table of rule 1.2 part 6). no no no
1 1.2.1 PACKAGE_NAME_MISSING Check: warns if package name is missing in a file
Fix: automatically adds package directive with the name that starts from the domain name (in example - com.huawei) and contains the real directory
yes no Recursively fix all imports in project.
Fix the directory where the code is stored.
Make this check isolated from domain name addition
1 1.2.1 PACKAGE_NAME_INCORRECT_CASE Check: warns if package name is in incorrect (non-lower) case
Fix: automatically update the case in package name
yes no Recursively update all imports in the project.
1 1.2.1 PACKAGE_NAME_INCORRECT_PREFIX Check: warns if package name does not start with the company's domain
Fix: automatically update the prefix in the package name
yes no Fix the directory where the code is stored.
Recursively update all imports in the project.
1 1.2.1 PACKAGE_NAME_INCORRECT_SYMBOLS Check: warns if package name has incorrect symbols like underscore or non-ASCII letters/digits.Exception: underscores that are used for differentiating of keywords in a name.
Fix: no but will be
no no Add autofix for at least converting underscore to a dot or replacing itFix the directory where the code is stored.Cover autofix with tests
1 1.2.1 PACKAGE_NAME_INCORRECT_PATH Check: warns if the path for a file does not match with a package name
Fix: replacing incorrect package name with the name constructed from a path to the file.
yes no Make this check isolated from domain name creationRecursively update all imports in the project.Fix the directory where the code is stored.Add test mechanism to test checker
1 1.2.1 INCORRECT_PACKAGE_SEPARATOR Check: warns if underscore is incorrectly used to split package naming
Fix: fixing all nodes in AST and the package name to remove all underscores
no no Recursively update usages of this class in the project
1 1.3.1 CLASS_NAME_INCORRECT Check: warns if the Class/Enum/Interface name does not match Pascal case ("([A-Z][a-z0-9]+)+")
Fix: fixing the case: if the it is some fixed case (like snake/camel) - with word saving. If not - will restore PascalCase as is.
yes no Recursively update usages of this class in the projectCheck and decide the better way on converting identifier to PascalCaseNeed to add checks using natural language processing to check that class name contains only nouns
1 1.3.1 OBJECT_NAME_INCORRECT Check: warns if the object does not match Pascal case ("([A-Z][a-z0-9]+)+")
Fix: fixing the case in the same way as for classes
yes no Recursively update usages of this class in the project
1 1.6.1 VARIABLE_NAME_INCORRECT_FORMAT Check: warns if the name of variable is not in lowerCamelCase or contains non-ASCII letters
Fix: fixing the case format to lowerCamelCase
no -
1 1.1.1 BACKTICKS_PROHIBITED Check: warns if backticks (``) are used in the identifier name, except the case when it is test method (marked with @Test annotation) no no -
1 1.1.1 VARIABLE_NAME_INCORRECT Check: warns if variable contains one single letter, only exceptions are fixed names that used in industry like {i, j}
Fix: no fix as we are not able to imagine good name by machine
no no Recursively update usages of this class in the projectMake exceptions configurable
1 1.5.1 CONSTANT_UPPERCASE Check: warns if CONSTANT (treated as const val from companion object or class level) is in non UPPER_SNAKE_CASE
Fix: name is changed to UPPER_SNAKE_CASE
yes no Recursively update usages of this identifier in the project
1 1.1.1 VARIABLE_HAS_PREFIX Check: warns if variable has prefix (like mVariable or M_VARIABLE), generally it is a bad code style (Android - is the only exception
Fix: no fix as we are not able to imagine good name by machine
no no may be we can fix it, but I do not see any sense for it
1 1.1.1 IDENTIFIER_LENGTH Check: identifier length should be in range [2,64] except names that used in industry like {i, j} and 'e' for catching exceptions.
Fix: no fix as we are not able to imagine good name by machine
no no May be make this rule configurable (length)
1 1.3.1 ENUM_VALUE Check: warns if enum value is in non UPPER_SNAKE_CASE or non PascalCase depending on the config, UPPER_SNAKE_CASE by default
Fix: automatically converting case to selected case
yes enumStyle: snakeCase, pascalCase Recursively update usages of this identifier in the project
1 1.1.1 GENERIC_NAME Check: warns if generic name contains more than 1 letter (capital). It can be followed by numbers, example: T12, T
Fix:
yes no Recursively update usages of this identifier in the project
1 1.4.1 FUNCTION_NAME_INCORRECT_CASE Check: function/method name should be in lowerCamelCase:
Fix:
yes no Recursively update usages of this function in the project
1 1.3.1 TYPEALIAS_NAME_INCORRECT_CASE Check: typealias name should be in pascalCase:
Fix:
yes no Recursively update usages of this typealias in the project
1 1.6.2 FUNCTION_BOOLEAN_PREFIX Check: functions/methods that return boolean should have special prefix like "is/should/e.t.c"
Fix:
yes no Recursively update usages of this function in the projectAggressive fix - what if new name will not be valid
1 1.1.1 FILE_NAME_INCORRECT Check: warns if file name does not have extension .kt/.kts
Fix: no
no no Extensions should be configurableIt can be aggressively autofixed
1 3.1.2 FILE_NAME_MATCH_CLASS Check: warns
Fix: no
no no Probably it can be autofixed, but it will be aggressive fix
1 1.1.1 EXCEPTION_SUFFIX Check: warns if class that extends any Exception class does not have Exception suffix
Fix: Adding suffix "Exception" to a class name
yes no Need to add tests for this
2 2.1.1 MISSING_KDOC_TOP_LEVEL Check: warns on file level internal or public class or function has missing KDoc
Fix: no
no no Support extension for setters/gettersSupport extension for method "override"
2 2.1.1 KDOC_EXTRA_PROPERTY Check: warn if there is property in KDoc which is not present in the class no no -
2 2.1.1 MISSING_KDOC_CLASS_ELEMENTS Check: warns if accessible internal elements (protected, public, internal) in a class are not documented
Fix: no
no no May be need to add exception cases for setters and getters. There is no sense in adding KDoc to them.
2 2.1.1 MISSING_KDOC_ON_FUNCTION Check: warns if accessible function doesn't have KDoc
Fix: adds KDoc template if it is not empty
yes no
2 2.1.2 KDOC_WITHOUT_PARAM_TAG Check: warns if accessible method has parameters and they are not documented in KDoc
Fix: If accessible method has no KDoc, KDoc template is added
yes no Should also make separate fix, even if there is already some Kdoc in place
2 2.1.2 KDOC_WITHOUT_RETURN_TAG Check: warns if accessible method has explicit return type they it is not documented in KDoc
Fix: If accessible method has no KDoc, KDoc template is added
yes no Should also make separate fix, even if there is already some Kdoc in place
2 2.1.2 KDOC_WITHOUT_THROWS_TAG Check: warns if accessible method has throw keyword and it is not documented in KDoc
Fix: If accessible method has no KDoc, KDoc template is added
yes no Should also make separate fix, even if there is already some Kdoc in place
2 2.1.3 KDOC_EMPTY_KDOC Check: warns if KDoc is empty
Fix: no
no no
2 2.1.3 KDOC_WRONG_SPACES_AFTER_TAG Check: warns if there is more than one space after KDoc tag
Fix: removes redundant spaces
yes no
2 2.1.3 KDOC_WRONG_TAGS_ORDER Check: warns if basic KDoc tags are not oredered properly
Fix: reorders them @param, @return, @throws
yes no Ensure basic tags are at the end of KDoc
2 2.1.3 KDOC_NEWLINES_BEFORE_BASIC_TAGS Check: warns if block of tags @param, @return, @throws is not separated from previous part of KDoc by exactly one empty line
Fix: adds empty line or removes redundant
yes no
2 2.1.3 KDOC_NO_NEWLINES_BETWEEN_BASIC_TAGS Check: if there is newline of empty KDoc line (with leading asterisk) between @param, @return, @throws tags
Fix: removes line
yes no
2 2.1.3 KDOC_NO_NEWLINE_AFTER_SPECIAL_TAGS Check: warns if special tags @apiNote, @implNote, @implSpec don't have exactly one empty line after
Fix: removes redundant lines or adds one
yes no Handle empty lines without leading asterisk
2 2.2.1 KDOC_NO_EMPTY_TAGS Check: warns if KDoc tags have empty content no no
2 2.1.3 KDOC_NO_DEPRECATED_TAG Check: warns if @deprecated is used in KDoc
Fix: adds @Deprecated annotation with message, removes tag
yes no Annotation's replaceWith field can be filled too
2 2.1.1 KDOC_NO_CONSTRUCTOR_PROPERTY Check: warns if there is no property tag inside KDoc before constructor yes no
2 2.1.1 KDOC_NO_CLASS_BODY_PROPERTIES_IN_HEADER Check: warns if property is declared in class body but documented with property tag inside KDoc before constructor yes no
2 2.1.1 KDOC_NO_CONSTRUCTOR_PROPERTY_WITH_COMMENT Check: warns if there is comment before property in constructor yes no
2 2.2.1 KDOC_CONTAINS_DATE_OR_AUTHOR Check: warns if header KDoc contains @author tag.
Warns if @since tag contains version and not date.
no no Detect author by other patterns (e.g. 'created by' etc.)
2 2.3.1 KDOC_TRIVIAL_KDOC_ON_FUNCTION Check: warns if KDoc contains single line with words 'return', 'get' or 'set' no no
2 2.2.1 HEADER_WRONG_FORMAT Checks: warns if there is no newline after header KDoc
Fix: adds newline
yes no Check if header is on the very top of file. It's hard to determine when it's not.
2 2.2.1 HEADER_MISSING_OR_WRONG_COPYRIGHT Checks: copyright exists on top of file and is properly formatted (as a block comment)
Fix: adds copyright if it is missing and required
yes isCopyrightMandatory, copyrightText (sets the copyright pattern for your project, you also can use ;@currYear; key word in your text in aim to indicate current year, instead of explicit specifying)
2 2.2.1 WRONG_COPYRIGHT_YEAR Checks: copyright have a valid year
Fix: makes a year valid
yes no -
2 2.2.1 HEADER_MISSING_IN_NON_SINGLE_CLASS_FILE Check: warns if file with zero or >1 classes doesn't have header KDoc no no
2 2.4.2 COMMENTED_OUT_CODE Check: warns if commented code is detected (when un-commented, can be parsed) no no Offset is lost when joined EOL comments are split again
2 2.4.1 COMMENT_WHITE_SPACE Check: warns if there is no space between // and comment, if there is no space between code and comment
Fix: adds a white space
yes maxSpaces -
2 2.4.1 WRONG_NEWLINES_AROUND_KDOC Check: warns if there is no new line above and under comment. Exception first comment
Fix: adds a new line
yes no -
2 2.4.1 FIRST_COMMENT_NO_BLANK_LINE Check: warns if there is a new line before first comment
Fix: deletes a new line
yes no -
2 2.4.1 IF_ELSE_COMMENTS Check: warns if there is a comment not in the else block
Fix: adds the comment to the first line in else block
yes no -
2 2.2.1 HEADER_NOT_BEFORE_PACKAGE Check: warns if header KDoc if file is located not before package directive
Fix: moves this KDoc
yes no
3 3.1.1 FILE_IS_TOO_LONG Check: warns if file has too many lines
Fix: no
no maxSize -
3 3.1.2 FILE_CONTAINS_ONLY_COMMENTS Check: warns if file contains only comments, imports and package directive. no no -
3 3.1.2 FILE_INCORRECT_BLOCKS_ORDER Check: warns if general order of code parts is wrong.
Fix: rearranges them.
yes no handle other elements that could be present before package directive (other comments)
3 3.1.2 FILE_NO_BLANK_LINE_BETWEEN_BLOCKS Check: warns if there is not exactly one blank line between code parts.
Fix: leaves single empty line
yes no -
3 3.1.2 FILE_UNORDERED_IMPORTS Check: warns if imports are not sorted alphabetically or contain empty lines among them
Fix: reorders imports.
yes no -
3 3.1.2 FILE_WILDCARD_IMPORTS Check: warns if wildcard imports are used except allows. no allowedWildcards -
3 3.1.2 UNUSED_IMPORT Check: warns if import is unused. no deleteUnusedImport -
3 3.2.1 NO_BRACES_IN_CONDITIONALS_AND_LOOPS Check: warns if braces are not used in if, else, when, for, do, and while statements. Exception: single line if statement.
Fix: adds missing braces.
yes no -
3 3.1.4 WRONG_ORDER_IN_CLASS_LIKE_STRUCTURES Check: warns if the declaration part of a class-like code structures (class/interface/etc.) is not in the proper order.
Fix: restores order according to code style guide.
yes no -
3 3.1.4 BLANK_LINE_BETWEEN_PROPERTIES Check: warns if properties with comments are not separated by a blank line, properties without comments are
Fix: fixes number of blank lines
yes no -
3 3.1.5 TOP_LEVEL_ORDER Check: warns if top level order is incorrect yes no -
3 3.2.2 BRACES_BLOCK_STRUCTURE_ERROR Check: warns if non-empty code blocks with braces don't follow the K&R style (1TBS or OTBS style) yes openBraceNewline closeBraceNewline -
3 3.4.1 EMPTY_BLOCK_STRUCTURE_ERROR Check: warns if empty block exist or if it's style is incorrect yes allowEmptyBlocks styleEmptyBlockWithNewline -
3 3.6.1 MORE_THAN_ONE_STATEMENT_PER_LINE Check: warns if there is more than one statement per line yes no -
3 3.3.1 WRONG_INDENTATION Check: warns if indentation is incorrect
Fix: corrects indentation.

Basic cases are covered currently.
yes extendedIndentOfParameters
alignedParameters
extendedIndentAfterOperators
extendedIndentBeforeDot
indentationSize
-
3 3.5.1 LONG_LINE Check: warns if length doesn't exceed the specified length no lineLength handle json method in KDoc
3 3.6.2 REDUNDANT_SEMICOLON Check: warns if semicolons are used at the end of line.
Fix: removes semicolon.
yes no -
3 3.6.2 WRONG_NEWLINES Check: warns if line breaks do not follow code style guid.
Fix: fixes incorrect line breaks.
yes no -
3 3.6.2 COMPLEX_EXPRESSION Check: warns if a long dot qualified expression is used in condition or as an argument no no -
3 3.6.2 TRAILING_COMMA Check: warns if missing trailing comma yes valueArgument valueParameter indices whenConditions collectionLiteral typeArgument typeParameter destructuringDeclaration -
3 3.15.1 STRING_CONCATENATION Check: warns if in a single line concatenation of strings is used yes no -
3 3.7.1 TOO_MANY_BLANK_LINES Check: warns if blank lines are used placed incorrectly.
Fix: removes redundant blank lines.
yes no
3 3.8.1 WRONG_WHITESPACE Check: warns if usage of horizontal spaces violates code style guide.
Fix: fixes incorrect whitespaces.
yes no -
3 3.8.1 TOO_MANY_CONSECUTIVE_SPACES Check: warns if there are too many consecutive spaces in line. Exception: in enum if configured and single eol comments
Fix: squeezes spaces to 1.
yes maxSpaces saveInitialFormattingForEnums -
3 3.9.1 ENUMS_SEPARATED Check: warns if enum structure is incorrect: enum entries should be separated by comma and line break and last entry should have semicolon in the end. yes no Replace variable to enum if it possible
3 3.11.1 WHEN_WITHOUT_ELSE Check: warns if when statement don't have else in the end.
Fix: adds else if when doesn't have it.
yes no -
3 3.10.2 LOCAL_VARIABLE_EARLY_DECLARATION Check: warns if local variable is declared not immediately before it's usage
Fix (not implemented yet): moves variable declaration
no no add auto fix
3 3.14.2 LONG_NUMERICAL_VALUES_SEPARATED Check: warns if value on integer or float constant is too big no maxNumberLength maxBlockLength -
3 3.14.3 MAGIC_NUMBER Check: warns if there is magic numbers in the code no ignoreNumbers, ignoreHashCodeFunction, ignorePropertyDeclaration, ignoreLocalVariableDeclaration, ignoreConstantDeclaration, ignoreCompanionObjectPropertyDeclaration, ignoreEnums, ignoreRanges, ignoreExtensionFunctions no
3 3.1.4 WRONG_DECLARATIONS_ORDER Check: if order of enum values or constant property inside companion isn't correct yes no -
3 3.12.1 ANNOTATION_NEW_LINE Check: warns if annotation not on a new single line yes no -
3 3.14.1 WRONG_MULTIPLE_MODIFIERS_ORDER Check: if multiple modifiers sequence is in the wrong order. Value identifier supported in Kotlin 1.5 yes no -
3 3.15.2 STRING_TEMPLATE_CURLY_BRACES Check: warns if there is redundant curly braces in string template
Fix: deletes curly braces
yes no +
3 3.15.2 STRING_TEMPLATE_QUOTES Check: warns if there are redundant quotes in string template
Fix: deletes quotes and $ symbol
yes no +
3 3.16.1 COLLAPSE_IF_STATEMENTS Check: warns if there are redundant nested if-statements, which could be collapsed into a single one by concatenating their conditions yes no -
3 3.16.2 COMPLEX_BOOLEAN_EXPRESSION Check: warns if boolean expression is complex and can be simplified.
Fix: replaces boolean expression with the simpler one
yes no +
3 3.17 CONVENTIONAL_RANGE Check: warns if possible to replace range with until or replace rangeTo function with range.
Fix: replace range with until or replace rangeTo function with range
yes no -
4 4.2.1 SMART_CAST_NEEDED Check: warns if casting can be omitted
Fix: Deletes casting
yes no -
4 4.3.1 NULLABLE_PROPERTY_TYPE Check: warns if immutable property is initialized with null or if immutable property can have non-nullable type instead of nullable
Fix: suggests initial value instead of null or changes immutable property type
yes no -
4 4.2.2 TYPE_ALIAS Check: if type reference of property is longer than expected yes typeReferenceLength -
4 4.1.3 SAY_NO_TO_VAR Check: raises a warning if var modifier is used on local variable (not in class, not on file level). And this var is not used in accumulators no no no
4 4.1.1 FLOAT_IN_ACCURATE_CALCULATIONS Checks that floating-point values are not used in arithmetic expressions
Fix: no
no no Current implementation detects only floating-point constants
4 4.2.2 TYPE_ALIAS Check: if type reference of property is longer than expected yes typeReferenceLength -
4 4.3.2 GENERIC_VARIABLE_WRONG_DECLARATION Check: warns if variables of generic types don't have explicit type declaration
Fix: fixes only variables that have generic declaration on both sides
yes no +
4 4.3.3 AVOID_NULL_CHECKS Check: warns if null-check is used explicitly (for example: if (a == null)) yes no no autofix by for now
5 5.1.1 TOO_LONG_FUNCTION Check: if length of function is too long no maxFunctionLength isIncludeHeader
5 5.1.2 NESTED_BLOCK Check if function has more nested blocks than expected no maxNestedBlockQuantit
5 5.1.3 AVOID_NESTED_FUNCTIONS Check: if there are any nested functions
Fix: declare function in the outer scope
yes no +
5 5.1.4 INVERSE_FUNCTION_PREFERRED Check: if function call with "!" can be rewritten to the inverse function (!isEmpty() -> isNotEmpty())
Fix: Rewrites function call
yes - -
5 5.2.1 LAMBDA_IS_NOT_LAST_PARAMETER Checks that lambda inside function parameters isn't in the end no no
5 5.2.2 TOO_MANY_PARAMETERS Check: if function contains more parameters than allowed no maxParameterListSize
5 5.2.3 WRONG_OVERLOADING_FUNCTION_ARGUMENTS Check: function has overloading instead use default arguments no no
5 5.2.4 RUN_BLOCKING_INSIDE_ASYNC Check: using runBlocking inside async block code no no -
5 5.2.5 TOO_MANY_LINES_IN_LAMBDA Check: that the long lambda has parameters no maxLambdaLength
5 5.2.6 CUSTOM_LABEL Check: that using unnecessary, custom label no no -
6 6.1.1 SINGLE_CONSTRUCTOR_SHOULD_BE_PRIMARY Check: warns if there is only one secondary constructor in a class
Fix: converts it to a primary constructor
yes no Support more complicated logic of constructor conversion
6 6.1.2 USE_DATA_CLASS Check: if class can be made as data class no no yes
6 6.1.3 EMPTY_PRIMARY_CONSTRUCTOR Check: if there is empty primary constructor yes no yes
6 6.1.4 MULTIPLE_INIT_BLOCKS Checks that classes have only one init block yes no -
6 6.1.5 USELESS_SUPERTYPE Check: if override function can be removed yes no
6 6.1.6 CLASS_SHOULD_NOT_BE_ABSTRACT Checks: if abstract class has any abstract method. If not, warns that class should not be abstract
Fix: deletes abstract modifier
yes no -
6 6.1.7 NO_CORRESPONDING_PROPERTY Checks: if in case of using "backing property" scheme, the name of real and back property are the same no no -
6 6.1.9 WRONG_NAME_OF_VARIABLE_INSIDE_ACCESSOR Check: used the name of a variable in the custom getter or setter no no
6 6.1.10 TRIVIAL_ACCESSORS_ARE_NOT_RECOMMENDED Check: if there are any trivial getters or setters
Fix: Delete trivial getter or setter
yes no -
6 6.1.8 CUSTOM_GETTERS_SETTERS Check: Inspection that checks that no custom getters and setters are used for properties no no -
6 6.1.11 COMPACT_OBJECT_INITIALIZATION Checks if class instantiation can be wrapped in apply for better readability no
6 6.1.12 INLINE_CLASS_CAN_BE_USED Check: warns if class can be transferred to the inline class. no no yes
6 6.2.2 EXTENSION_FUNCTION_SAME_SIGNATURE Checks if extension function has the same signature as another extension function and their classes are related no no +
6 6.4.1 AVOID_USING_UTILITY_CLASS Checks if there is class/object that can be replace with extension function no no -
6 6.4.2 OBJECT_IS_PREFERRED Checks: if class is stateless it is preferred to use object yes no +
6 6.2.3 EXTENSION_FUNCTION_WITH_CLASS Check: if file contains class, then it can not have extension functions for the same class no no -
6 6.5.1 RUN_IN_SCRIPT Checks : if kts script contains other functions except run code yes no -