Files
peakup/peakup-backend/checkstyle.xml
2026-05-15 09:34:24 +02:00

165 lines
7.1 KiB
XML

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<!--
Checkstyle configuration mirroring IntelliJ IDEA's default Java code style.
- 4-space indentation, no tabs
- 250-char line length
- K&R brace style (opening brace on same line)
- Standard naming conventions (lowerCamelCase, UpperCamelCase, UPPER_SNAKE)
- Suppressions for mapper files (aligned @Mapping annotations) in suppressions.xml
-->
<module name="Checker">
<property name="severity" value="error"/>
<property name="fileExtensions" value="java"/>
<!-- No tab characters anywhere in the file -->
<module name="FileTabCharacter">
<property name="eachLine" value="true"/>
</module>
<!-- Files must end with a newline -->
<module name="NewlineAtEndOfFile"/>
<!-- No trailing whitespace -->
<module name="RegexpSingleline">
<property name="format" value="\s+$"/>
<property name="message" value="Trailing whitespace"/>
</module>
<!-- 240-char line length; imports and URLs ignored -->
<module name="LineLength">
<property name="max" value="240"/>
<property name="ignorePattern" value="^package.*|^import.*|https?://|ftp://"/>
</module>
<module name="TreeWalker">
<!-- ===== IMPORTS ===== -->
<module name="AvoidStarImport"/>
<module name="UnusedImports"/>
<!-- ===== INDENTATION ===== -->
<module name="Indentation">
<property name="basicOffset" value="4"/>
<property name="braceAdjustment" value="0"/>
<property name="caseIndent" value="4"/>
<property name="throwsIndent" value="8"/>
<property name="lineWrappingIndentation" value="8"/>
<property name="arrayInitIndent" value="4"/>
</module>
<!-- ===== BRACES ===== -->
<!-- Opening { on same line (K&R) -->
<module name="LeftCurly"/>
<!-- Closing } on own line -->
<module name="RightCurly"/>
<!-- Always use braces for if/else/for/while/do -->
<module name="NeedBraces">
<property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
</module>
<!-- ===== WHITESPACE ===== -->
<module name="WhitespaceAfter">
<property name="tokens" value="COMMA, SEMI, TYPECAST, LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, LITERAL_RETURN, LITERAL_SWITCH"/>
</module>
<module name="WhitespaceAround">
<property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, DIV, DIV_ASSIGN, EQUAL, GE, GT, LAND, LE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, SL, SL_ASSIGN, SR, SR_ASSIGN, STAR, STAR_ASSIGN, TYPE_EXTENSION_AND"/>
<property name="allowEmptyConstructors" value="true"/>
<property name="allowEmptyMethods" value="true"/>
<property name="allowEmptyTypes" value="true"/>
<property name="allowEmptyLoops" value="true"/>
<property name="allowEmptyLambdas" value="true"/>
</module>
<module name="NoWhitespaceBefore">
<property name="tokens" value="COMMA, SEMI, POST_INC, POST_DEC"/>
<property name="allowLineBreaks" value="true"/>
</module>
<module name="GenericWhitespace"/>
<module name="MethodParamPad"/>
<module name="ParenPad"/>
<!-- Blank lines between methods/constructors/inner classes (not between fields) -->
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="true"/>
<property name="allowMultipleEmptyLines" value="false"/>
<property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
<property name="tokens" value="METHOD_DEF, CTOR_DEF, STATIC_INIT, INSTANCE_INIT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF"/>
</module>
<!-- ===== NAMING ===== -->
<module name="TypeName"/>
<module name="MethodName"/>
<module name="LocalVariableName"/>
<module name="MemberName"/>
<module name="ParameterName"/>
<module name="StaticVariableName"/>
<module name="ConstantName"/>
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
</module>
<!-- ===== FINAL ===== -->
<!-- Local variables and parameters that can be final must be declared final -->
<module name="FinalLocalVariable">
<property name="tokens" value="VARIABLE_DEF, PARAMETER_DEF"/>
<property name="validateEnhancedForLoopVariable" value="true"/>
</module>
<!-- ===== METHOD SIZE ===== -->
<!-- Methods should stay under 60 lines (blank lines and comments excluded) -->
<module name="MethodLength">
<property name="max" value="60"/>
<property name="countEmpty" value="false"/>
</module>
<!-- Max 7 parameters per method or constructor -->
<module name="ParameterNumber">
<property name="max" value="7"/>
</module>
<!-- ===== ERROR PREVENTION ===== -->
<!-- Unused local variables -->
<module name="UnusedLocalVariable"/>
<!-- equals() without hashCode() -->
<module name="EqualsHashCode"/>
<!-- switch without default -->
<module name="MissingSwitchDefault"/>
<!-- accidental switch fall-through -->
<module name="FallThrough"/>
<!-- assignment inside a condition: if (x = y) -->
<module name="InnerAssignment"/>
<!-- x == true, x != false -->
<module name="SimplifyBooleanExpression"/>
<!-- if (x) return true; else return false; -->
<module name="SimplifyBooleanReturn"/>
<!-- local variable or parameter shadows a field -->
<module name="HiddenField">
<property name="ignoreConstructorParameter" value="true"/>
<property name="ignoreSetter" value="true"/>
</module>
<!-- ===== CODE STYLE ===== -->
<!-- One statement per line -->
<module name="OneStatementPerLine"/>
<!-- No multiple variable declarations on one line -->
<module name="MultipleVariableDeclarations"/>
<!-- Only one top-level type per file -->
<module name="OneTopLevelClass"/>
<!-- Modifier order: public protected private abstract default static final ... -->
<module name="ModifierOrder"/>
<!-- No empty statements (stray semicolons) -->
<module name="EmptyStatement"/>
<!-- Use equals() for string comparison, not == -->
<module name="StringLiteralEquality"/>
<!-- No finalize() method -->
<module name="NoFinalizer"/>
<!-- C-style array declarations (String[] args, not String args[]) -->
<module name="ArrayTypeStyle"/>
<!-- Use L not l for long literals -->
<module name="UpperEll"/>
</module>
</module>