blob: 54a4881cd286246a4239dedd8ba4ac54f1d5940d [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001<?xml version="1.0"?>
2<ruleset name="WPILibRuleset"
Austin Schuh812d0d12021-11-04 20:16:48 -07003 xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
Brian Silverman8fce7482020-01-05 13:18:21 -08006
7 <description>PMD Ruleset for WPILib</description>
8
9 <exclude-pattern>.*/*JNI.*</exclude-pattern>
10 <exclude-pattern>.*/*IntegrationTests.*</exclude-pattern>
11
12 <rule ref="category/java/bestpractices.xml">
13 <exclude name="AccessorClassGeneration" />
14 <exclude name="AccessorMethodGeneration" />
15 <exclude name="AvoidPrintStackTrace" />
James Kuszmaulcf324122023-01-14 14:07:17 -080016 <exclude name="AvoidReassigningCatchVariables" />
Brian Silverman8fce7482020-01-05 13:18:21 -080017 <exclude name="AvoidReassigningParameters" />
Austin Schuh812d0d12021-11-04 20:16:48 -070018 <exclude name="AvoidUsingHardCodedIP" />
19 <exclude name="ConstantsInInterface" />
Brian Silverman8fce7482020-01-05 13:18:21 -080020 <exclude name="JUnitAssertionsShouldIncludeMessage" />
21 <exclude name="JUnitTestContainsTooManyAsserts" />
James Kuszmaulcf324122023-01-14 14:07:17 -080022 <exclude name="JUnitTestsShouldIncludeAssert" />
Brian Silverman8fce7482020-01-05 13:18:21 -080023 <exclude name="JUnit4TestShouldUseAfterAnnotation" />
24 <exclude name="JUnit4TestShouldUseBeforeAnnotation" />
25 <exclude name="JUnit4TestShouldUseTestAnnotation" />
Austin Schuh812d0d12021-11-04 20:16:48 -070026 <exclude name="LooseCoupling" />
James Kuszmaulcf324122023-01-14 14:07:17 -080027 <exclude name="PreserveStackTrace" />
Brian Silverman8fce7482020-01-05 13:18:21 -080028 <exclude name="ReplaceHashtableWithMap" />
29 <exclude name="ReplaceVectorWithList" />
30 <exclude name="SwitchStmtsShouldHaveDefault" />
31 <exclude name="SystemPrintln" />
32 <exclude name="UseVarargs" />
33 </rule>
34 <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod">
35 <properties>
36 <property name="violationSuppressRegex"
Austin Schuh812d0d12021-11-04 20:16:48 -070037 value=".*'.*Arguments\(\)'.*" />
Brian Silverman8fce7482020-01-05 13:18:21 -080038 </properties>
39 </rule>
40
41 <rule ref="category/java/design.xml">
Austin Schuh812d0d12021-11-04 20:16:48 -070042 <exclude name="AvoidThrowingRawExceptionTypes" />
Austin Schuh75263e32022-02-22 18:05:32 -080043 <exclude name="CognitiveComplexity" />
Austin Schuh812d0d12021-11-04 20:16:48 -070044 <exclude name="CyclomaticComplexity" />
Brian Silverman8fce7482020-01-05 13:18:21 -080045 <exclude name="DataClass" />
Austin Schuh812d0d12021-11-04 20:16:48 -070046 <exclude name="ExcessiveClassLength" />
47 <exclude name="ExcessiveImports" />
48 <exclude name="ExcessiveMethodLength" />
49 <exclude name="ExcessiveParameterList" />
50 <exclude name="ExcessivePublicCount" />
51 <exclude name="GodClass" />
Brian Silverman8fce7482020-01-05 13:18:21 -080052 <exclude name="LawOfDemeter" />
53 <exclude name="LoosePackageCoupling" />
Austin Schuh812d0d12021-11-04 20:16:48 -070054 <exclude name="NPathComplexity" />
Brian Silverman8fce7482020-01-05 13:18:21 -080055 <exclude name="NcssConstructorCount" />
56 <exclude name="NcssCount" />
57 <exclude name="NcssMethodCount" />
Austin Schuh812d0d12021-11-04 20:16:48 -070058 <exclude name="TooManyFields" />
Austin Schuh1e69f942020-11-14 15:06:14 -080059 <exclude name="TooManyMethods" />
Brian Silverman8fce7482020-01-05 13:18:21 -080060 </rule>
61
62 <rule ref="category/java/errorprone.xml">
63 <exclude name="AssignmentToNonFinalStatic" />
James Kuszmaulcf324122023-01-14 14:07:17 -080064 <exclude name="AvoidCatchingThrowable" />
Brian Silverman8fce7482020-01-05 13:18:21 -080065 <exclude name="AvoidDuplicateLiterals" />
66 <exclude name="AvoidLiteralsInIfCondition" />
67 <exclude name="BeanMembersShouldSerialize" />
Austin Schuh75263e32022-02-22 18:05:32 -080068 <exclude name="CloseResource" />
Brian Silverman8fce7482020-01-05 13:18:21 -080069 <exclude name="ConstructorCallsOverridableMethod" />
70 <exclude name="DataflowAnomalyAnalysis" />
Austin Schuh75263e32022-02-22 18:05:32 -080071 <exclude name="DoNotTerminateVM" />
James Kuszmaulcf324122023-01-14 14:07:17 -080072 <exclude name="EmptyCatchBlock" />
73 <exclude name="EmptyWhileStmt" />
Brian Silverman8fce7482020-01-05 13:18:21 -080074 <exclude name="FinalizeDoesNotCallSuperFinalize" />
75 <exclude name="JUnitSpelling" />
76 <exclude name="MissingSerialVersionUID" />
77 <exclude name="NullAssignment" />
78 </rule>
79
80 <rule ref="category/java/multithreading.xml">
81 <exclude name="AvoidSynchronizedAtMethodLevel" />
82 <exclude name="AvoidUsingVolatile" />
83 <exclude name="DoNotUseThreads" />
84 <exclude name="UseConcurrentHashMap" />
85 </rule>
86
87 <rule ref="category/java/performance.xml">
88 <exclude name="AvoidUsingShortType" />
Austin Schuh812d0d12021-11-04 20:16:48 -070089 <exclude name="AvoidInstantiatingObjectsInLoops" />
Brian Silverman8fce7482020-01-05 13:18:21 -080090 </rule>
91
Austin Schuh812d0d12021-11-04 20:16:48 -070092 <rule name="UnnecessaryCastRule" language="java"
93 message="Avoid unnecessary casts"
Austin Schuh75263e32022-02-22 18:05:32 -080094 class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryCastRule"
95 externalInfoUrl="https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryCastRule.java" />
Brian Silverman8fce7482020-01-05 13:18:21 -080096
97 <!-- Custom Rules -->
98 <rule name="UseRequireNonNull"
Austin Schuh812d0d12021-11-04 20:16:48 -070099 message="Use Objects.requireNonNull() instead of throwing a NullPointerException yourself."
100 language="java" class="net.sourceforge.pmd.lang.rule.XPathRule">
Brian Silverman8fce7482020-01-05 13:18:21 -0800101 <description>Use Objects.requireNonNull() instead of throwing a
Austin Schuh812d0d12021-11-04 20:16:48 -0700102 NullPointerException yourself.</description>
Brian Silverman8fce7482020-01-05 13:18:21 -0800103 <properties>
104 <property name="xpath">
105 <value>
106 <![CDATA[
107 //IfStatement[child::Expression//NullLiteral]/Statement//ThrowStatement/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ClassOrInterfaceType[@Image='NullPointerException']
108 ]]>
109 </value>
110 </property>
111 </properties>
112 <priority>3</priority>
113 <example>
114<![CDATA[
115 public class Example {
116 public Example(Object example) {
117 if (example == null) {
118 throw new NullPointerException();
119 }
120 }
121 }
122 ]]>
123 </example>
124 </rule>
125</ruleset>