Files
allwpilib/styleguide/pmd-ruleset.xml

165 lines
6.4 KiB
XML
Raw Permalink Normal View History

2016-12-08 00:24:44 -05:00
<?xml version="1.0"?>
<ruleset name="WPILibRuleset"
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
2018-06-03 10:00:53 -07:00
<description>PMD Ruleset for WPILib</description>
<!-- Generated files -->
<exclude-pattern>.*/*EntryImpl\.java</exclude-pattern>
<exclude-pattern>.*/*Subscriber\.java</exclude-pattern>
<exclude-pattern>.*/Timestamped.*\.java</exclude-pattern>
2025-08-09 00:00:53 -07:00
<exclude-pattern>.*/units/measure/.*\.java</exclude-pattern>
<exclude-pattern>.*/*Examples.*</exclude-pattern>
<exclude-pattern>.*/*JNI.*</exclude-pattern>
<exclude-pattern>.*/math/proto.*</exclude-pattern>
<exclude-pattern>.*/command3/proto.*</exclude-pattern>
2018-06-03 10:00:53 -07:00
<rule ref="category/java/bestpractices.xml">
<exclude name="AccessorClassGeneration" />
<exclude name="AccessorMethodGeneration" />
<exclude name="AvoidPrintStackTrace" />
<exclude name="AvoidReassigningCatchVariables" />
2018-06-03 10:00:53 -07:00
<exclude name="AvoidReassigningParameters" />
<exclude name="AvoidUsingHardCodedIP" />
<exclude name="ConstantsInInterface" />
<exclude name="ExhaustiveSwitchHasDefault" />
<exclude name="LooseCoupling" />
<exclude name="NonExhaustiveSwitch" />
<exclude name="PreserveStackTrace" />
<exclude name="RelianceOnDefaultCharset" />
2018-06-03 10:00:53 -07:00
<exclude name="ReplaceHashtableWithMap" />
<exclude name="ReplaceVectorWithList" />
<exclude name="SystemPrintln" />
<exclude name="UnitTestAssertionsShouldIncludeMessage" />
<exclude name="UnitTestContainsTooManyAsserts" />
<exclude name="UnitTestShouldIncludeAssert" />
<exclude name="UnitTestShouldUseAfterAnnotation" />
<exclude name="UnitTestShouldUseBeforeAnnotation" />
<exclude name="UnitTestShouldUseTestAnnotation" />
2018-06-03 10:00:53 -07:00
<exclude name="UseVarargs" />
</rule>
<rule ref="category/java/bestpractices.xml/UnusedPrivateMethod">
<properties>
<property name="violationSuppressRegex"
value=".*'.*Arguments\(\)'.*" />
</properties>
</rule>
2024-06-09 01:08:23 -04:00
<rule ref="category/java/bestpractices.xml/UnusedLocalVariable">
<properties>
<property name="violationSuppressXPath" value="//Resource"/>
</properties>
</rule>
2018-06-03 10:00:53 -07:00
<rule ref="category/java/design.xml">
<exclude name="AvoidDeeplyNestedIfStmts" />
2024-06-09 01:08:23 -04:00
<exclude name="AvoidThrowingNewInstanceOfSameException" />
<exclude name="AvoidThrowingRawExceptionTypes" />
<exclude name="CognitiveComplexity" />
2024-06-09 01:08:23 -04:00
<exclude name="CouplingBetweenObjects" />
<exclude name="CyclomaticComplexity" />
2018-06-03 10:00:53 -07:00
<exclude name="DataClass" />
2024-06-09 01:08:23 -04:00
<exclude name="ExceptionAsFlowControl" />
<exclude name="ExcessiveImports" />
<exclude name="ExcessiveParameterList" />
<exclude name="ExcessivePublicCount" />
<exclude name="GodClass" />
2018-06-03 10:00:53 -07:00
<exclude name="LawOfDemeter" />
<exclude name="LoosePackageCoupling" />
<exclude name="NPathComplexity" />
2018-06-03 10:00:53 -07:00
<exclude name="NcssCount" />
<exclude name="PublicMemberInNonPublicType" />
<exclude name="TooManyFields" />
<exclude name="TooManyMethods" />
2018-06-03 10:00:53 -07:00
</rule>
<rule ref="category/java/errorprone.xml">
<exclude name="AssignmentInOperand" />
2018-06-03 10:00:53 -07:00
<exclude name="AssignmentToNonFinalStatic" />
<exclude name="AvoidCatchingThrowable" />
2018-06-03 10:00:53 -07:00
<exclude name="AvoidDuplicateLiterals" />
<exclude name="AvoidLiteralsInIfCondition" />
<exclude name="CloseResource" />
2018-06-03 10:00:53 -07:00
<exclude name="ConstructorCallsOverridableMethod" />
<exclude name="DoNotTerminateVM" />
<exclude name="EmptyCatchBlock" />
2018-06-03 10:00:53 -07:00
<exclude name="FinalizeDoesNotCallSuperFinalize" />
<exclude name="JUnitSpelling" />
<exclude name="MissingSerialVersionUID" />
<exclude name="NonSerializableClass" />
2018-06-03 10:00:53 -07:00
<exclude name="NullAssignment" />
</rule>
<rule ref="category/java/multithreading.xml">
<exclude name="AvoidSynchronizedAtMethodLevel" />
<exclude name="AvoidSynchronizedStatement" />
2018-06-03 10:00:53 -07:00
<exclude name="AvoidUsingVolatile" />
<exclude name="DoNotUseThreads" />
<exclude name="UseConcurrentHashMap" />
2018-06-03 10:00:53 -07:00
</rule>
<rule ref="category/java/performance.xml">
<exclude name="AvoidInstantiatingObjectsInLoops" />
<!--
This rule is in place to save three (!) bytecode instructions when initializing a field to its default value.
Code that's more readable due to having explicit initial values is more important than reducing class size by a
few bytes.
-->
<exclude name="RedundantFieldInitializer" />
2018-06-03 10:00:53 -07:00
</rule>
<rule name="UnnecessaryCastRule" language="java"
message="Avoid unnecessary casts"
class="net.sourceforge.pmd.lang.java.rule.codestyle.UnnecessaryCastRule"
externalInfoUrl="https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UnnecessaryCastRule.java" />
2018-06-03 10:00:53 -07:00
<!-- Custom Rules -->
<rule name="UseRequireNonNull"
message="Use Objects.requireNonNull() instead of throwing a NullPointerException yourself."
2024-06-09 01:08:23 -04:00
language="java" class="net.sourceforge.pmd.lang.rule.xpath.XPathRule">
<description>Use Objects.requireNonNull() instead of throwing a
NullPointerException yourself.</description>
<properties>
<property name="xpath">
<value>
<![CDATA[
//IfStatement[child::Expression//NullLiteral]/Statement//ThrowStatement/Expression/PrimaryExpression/PrimaryPrefix/AllocationExpression/ClassOrInterfaceType[@Image='NullPointerException']
]]>
</value>
</property>
</properties>
<priority>3</priority>
<example>
<![CDATA[
public class Example {
public Example(Object example) {
if (example == null) {
throw new NullPointerException();
}
}
}
]]>
</example>
</rule>
<rule name="PublicFieldNamingConvention"
language="java"
message="Public fields must follow lowerCamelCase."
class="net.sourceforge.pmd.lang.rule.xpath.XPathRule">
<description>
</description>
<priority>3</priority>
<properties>
<property name="xpath">
<value>
<![CDATA[
//ClassDeclaration[not(matches(@PackageName, "org.wpilib.math"))]/ClassBody/FieldDeclaration[@Visibility = 'public' and @Static = false()]/VariableDeclarator[not(matches(@Name, "^[a-z][a-zA-Z0-9]*$"))]
]]>
</value>
</property>
</properties>
</rule>
2016-12-08 00:24:44 -05:00
</ruleset>