blob: 0f37af0871ae575ee4eba7353cfe7b4dce4bc0b1 [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" />
16 <exclude name="AvoidReassigningParameters" />
Austin Schuh812d0d12021-11-04 20:16:48 -070017 <exclude name="AvoidUsingHardCodedIP" />
18 <exclude name="ConstantsInInterface" />
Brian Silverman8fce7482020-01-05 13:18:21 -080019 <exclude name="JUnitAssertionsShouldIncludeMessage" />
20 <exclude name="JUnitTestContainsTooManyAsserts" />
21 <exclude name="JUnit4TestShouldUseAfterAnnotation" />
22 <exclude name="JUnit4TestShouldUseBeforeAnnotation" />
23 <exclude name="JUnit4TestShouldUseTestAnnotation" />
Austin Schuh812d0d12021-11-04 20:16:48 -070024 <exclude name="LooseCoupling" />
Brian Silverman8fce7482020-01-05 13:18:21 -080025 <exclude name="ReplaceHashtableWithMap" />
26 <exclude name="ReplaceVectorWithList" />
27 <exclude name="SwitchStmtsShouldHaveDefault" />
28 <exclude name="SystemPrintln" />
29 <exclude name="UseVarargs" />
30 </rule>
31 <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod">
32 <properties>
33 <property name="violationSuppressRegex"
Austin Schuh812d0d12021-11-04 20:16:48 -070034 value=".*'.*Arguments\(\)'.*" />
Brian Silverman8fce7482020-01-05 13:18:21 -080035 </properties>
36 </rule>
37
38 <rule ref="category/java/design.xml">
Austin Schuh812d0d12021-11-04 20:16:48 -070039 <exclude name="AvoidThrowingRawExceptionTypes" />
Austin Schuh75263e32022-02-22 18:05:32 -080040 <exclude name="CognitiveComplexity" />
Austin Schuh812d0d12021-11-04 20:16:48 -070041 <exclude name="CyclomaticComplexity" />
Brian Silverman8fce7482020-01-05 13:18:21 -080042 <exclude name="DataClass" />
Austin Schuh812d0d12021-11-04 20:16:48 -070043 <exclude name="ExcessiveClassLength" />
44 <exclude name="ExcessiveImports" />
45 <exclude name="ExcessiveMethodLength" />
46 <exclude name="ExcessiveParameterList" />
47 <exclude name="ExcessivePublicCount" />
48 <exclude name="GodClass" />
Brian Silverman8fce7482020-01-05 13:18:21 -080049 <exclude name="LawOfDemeter" />
50 <exclude name="LoosePackageCoupling" />
Austin Schuh812d0d12021-11-04 20:16:48 -070051 <exclude name="NPathComplexity" />
Brian Silverman8fce7482020-01-05 13:18:21 -080052 <exclude name="NcssConstructorCount" />
53 <exclude name="NcssCount" />
54 <exclude name="NcssMethodCount" />
Austin Schuh812d0d12021-11-04 20:16:48 -070055 <exclude name="TooManyFields" />
Austin Schuh1e69f942020-11-14 15:06:14 -080056 <exclude name="TooManyMethods" />
Brian Silverman8fce7482020-01-05 13:18:21 -080057 </rule>
58
59 <rule ref="category/java/errorprone.xml">
60 <exclude name="AssignmentToNonFinalStatic" />
61 <exclude name="AvoidDuplicateLiterals" />
62 <exclude name="AvoidLiteralsInIfCondition" />
63 <exclude name="BeanMembersShouldSerialize" />
Austin Schuh75263e32022-02-22 18:05:32 -080064 <exclude name="CloseResource" />
Brian Silverman8fce7482020-01-05 13:18:21 -080065 <exclude name="ConstructorCallsOverridableMethod" />
66 <exclude name="DataflowAnomalyAnalysis" />
Austin Schuh75263e32022-02-22 18:05:32 -080067 <exclude name="DoNotTerminateVM" />
Brian Silverman8fce7482020-01-05 13:18:21 -080068 <exclude name="FinalizeDoesNotCallSuperFinalize" />
69 <exclude name="JUnitSpelling" />
70 <exclude name="MissingSerialVersionUID" />
71 <exclude name="NullAssignment" />
72 </rule>
73
74 <rule ref="category/java/multithreading.xml">
75 <exclude name="AvoidSynchronizedAtMethodLevel" />
76 <exclude name="AvoidUsingVolatile" />
77 <exclude name="DoNotUseThreads" />
78 <exclude name="UseConcurrentHashMap" />
79 </rule>
80
81 <rule ref="category/java/performance.xml">
82 <exclude name="AvoidUsingShortType" />
Austin Schuh812d0d12021-11-04 20:16:48 -070083 <exclude name="AvoidInstantiatingObjectsInLoops" />
Brian Silverman8fce7482020-01-05 13:18:21 -080084 </rule>
85
Austin Schuh812d0d12021-11-04 20:16:48 -070086 <rule name="UnnecessaryCastRule" language="java"
87 message="Avoid unnecessary casts"
Austin Schuh75263e32022-02-22 18:05:32 -080088 class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryCastRule"
89 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 -080090
91 <!-- Custom Rules -->
92 <rule name="UseRequireNonNull"
Austin Schuh812d0d12021-11-04 20:16:48 -070093 message="Use Objects.requireNonNull() instead of throwing a NullPointerException yourself."
94 language="java" class="net.sourceforge.pmd.lang.rule.XPathRule">
Brian Silverman8fce7482020-01-05 13:18:21 -080095 <description>Use Objects.requireNonNull() instead of throwing a
Austin Schuh812d0d12021-11-04 20:16:48 -070096 NullPointerException yourself.</description>
Brian Silverman8fce7482020-01-05 13:18:21 -080097 <properties>
98 <property name="xpath">
99 <value>
100 <![CDATA[
101 //IfStatement[child::Expression//NullLiteral]/Statement//ThrowStatement/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ClassOrInterfaceType[@Image='NullPointerException']
102 ]]>
103 </value>
104 </property>
105 </properties>
106 <priority>3</priority>
107 <example>
108<![CDATA[
109 public class Example {
110 public Example(Object example) {
111 if (example == null) {
112 throw new NullPointerException();
113 }
114 }
115 }
116 ]]>
117 </example>
118 </rule>
119</ruleset>