Skip to content

Commit 20f0492

Browse files
authored
chore: configure PMD to detect main methods (#6289)
1 parent e41c2b9 commit 20f0492

File tree

3 files changed

+103
-15
lines changed

3 files changed

+103
-15
lines changed

pmd-custom_ruleset.xml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0"?>
2+
<ruleset name="TheAlgorithms/Java ruleset"
3+
xmlns="http://pmd.sf.net/ruleset/1.0.0"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
6+
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
7+
<description>
8+
Custom PMD checks for TheAlgorithms/Java
9+
</description>
10+
<rule name="UselessMainMethod"
11+
language="java"
12+
message="The main method is redundant in this context"
13+
class="net.sourceforge.pmd.lang.rule.xpath.XPathRule">
14+
<description>
15+
Avoid using the main method.
16+
</description>
17+
<priority>3</priority>
18+
<properties>
19+
<property name="xpath">
20+
<value>
21+
<![CDATA[
22+
//MethodDeclaration[@Name = "main"]
23+
]]>
24+
</value>
25+
</property>
26+
</properties>
27+
</rule>
28+
</ruleset>

pmd-exclude.properties

Lines changed: 71 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,120 @@
1+
com.thealgorithms.ciphers.AES=UselessMainMethod
2+
com.thealgorithms.ciphers.AESEncryption=UselessMainMethod
13
com.thealgorithms.ciphers.AffineCipher=UselessParentheses
24
com.thealgorithms.ciphers.DES=UselessParentheses
5+
com.thealgorithms.ciphers.ProductCipher=UselessMainMethod
36
com.thealgorithms.ciphers.RSA=UselessParentheses
4-
com.thealgorithms.conversions.AnyBaseToAnyBase=UselessParentheses
7+
com.thealgorithms.conversions.AnyBaseToAnyBase=UselessMainMethod,UselessParentheses
58
com.thealgorithms.conversions.AnytoAny=UselessParentheses
9+
com.thealgorithms.conversions.RgbHsvConversion=UselessMainMethod
610
com.thealgorithms.datastructures.crdt.Pair=UnusedPrivateField
711
com.thealgorithms.datastructures.graphs.AStar=UselessParentheses
812
com.thealgorithms.datastructures.graphs.AdjacencyMatrixGraph=CollapsibleIfStatements,UnnecessaryFullyQualifiedName,UselessParentheses
13+
com.thealgorithms.datastructures.graphs.BellmanFord=UselessMainMethod
914
com.thealgorithms.datastructures.graphs.BipartiteGraphDFS=CollapsibleIfStatements
15+
com.thealgorithms.datastructures.graphs.ConnectedComponent=UselessMainMethod
16+
com.thealgorithms.datastructures.graphs.Cycles=UselessMainMethod
17+
com.thealgorithms.datastructures.graphs.Graphs=UselessMainMethod
18+
com.thealgorithms.datastructures.graphs.KahnsAlgorithm=UselessMainMethod
19+
com.thealgorithms.datastructures.graphs.MatrixGraphs=UselessMainMethod
1020
com.thealgorithms.datastructures.hashmap.hashing.HashMapCuckooHashing=UselessParentheses
21+
com.thealgorithms.datastructures.hashmap.hashing.MainCuckooHashing=UselessMainMethod
1122
com.thealgorithms.datastructures.heaps.FibonacciHeap=UselessParentheses
1223
com.thealgorithms.datastructures.heaps.HeapNode=UselessParentheses
1324
com.thealgorithms.datastructures.lists.DoublyLinkedList=UselessParentheses
25+
com.thealgorithms.datastructures.lists.Link=UselessMainMethod
26+
com.thealgorithms.datastructures.lists.RandomNode=UselessMainMethod
1427
com.thealgorithms.datastructures.lists.SearchSinglyLinkedListRecursion=UselessParentheses
15-
com.thealgorithms.datastructures.lists.SinglyLinkedList=UnusedLocalVariable
28+
com.thealgorithms.datastructures.lists.SinglyLinkedList=UnusedLocalVariable,UselessMainMethod
29+
com.thealgorithms.datastructures.queues.Deque=UselessMainMethod
1630
com.thealgorithms.datastructures.queues.PriorityQueue=UselessParentheses
31+
com.thealgorithms.datastructures.trees.BSTRecursiveGeneric=UselessMainMethod
1732
com.thealgorithms.datastructures.trees.CheckBinaryTreeIsValidBST=UselessParentheses
33+
com.thealgorithms.datastructures.trees.LCA=UselessMainMethod
34+
com.thealgorithms.datastructures.trees.NearestRightKey=UselessMainMethod
35+
com.thealgorithms.datastructures.trees.PrintTopViewofTree=UselessMainMethod
1836
com.thealgorithms.datastructures.trees.SegmentTree=UselessParentheses
1937
com.thealgorithms.devutils.nodes.LargeTreeNode=UselessParentheses
2038
com.thealgorithms.devutils.nodes.SimpleNode=UselessParentheses
2139
com.thealgorithms.devutils.nodes.SimpleTreeNode=UselessParentheses
2240
com.thealgorithms.devutils.nodes.TreeNode=UselessParentheses
23-
com.thealgorithms.divideandconquer.ClosestPair=UnnecessaryFullyQualifiedName,UselessParentheses
41+
com.thealgorithms.divideandconquer.ClosestPair=UnnecessaryFullyQualifiedName,UselessMainMethod,UselessParentheses
2442
com.thealgorithms.divideandconquer.Point=UselessParentheses
43+
com.thealgorithms.dynamicprogramming.CatalanNumber=UselessMainMethod
44+
com.thealgorithms.dynamicprogramming.EggDropping=UselessMainMethod
45+
com.thealgorithms.dynamicprogramming.LongestPalindromicSubsequence=UselessMainMethod
2546
com.thealgorithms.dynamicprogramming.WineProblem=UselessParentheses
2647
com.thealgorithms.maths.BinomialCoefficient=UselessParentheses
2748
com.thealgorithms.maths.Complex=UselessParentheses
2849
com.thealgorithms.maths.DistanceFormulaTest=UnnecessaryFullyQualifiedName
50+
com.thealgorithms.maths.EulerMethod=UselessMainMethod
51+
com.thealgorithms.maths.GCDRecursion=UselessMainMethod
2952
com.thealgorithms.maths.Gaussian=UselessParentheses
3053
com.thealgorithms.maths.GcdSolutionWrapper=UselessParentheses
3154
com.thealgorithms.maths.HeronsFormula=UselessParentheses
55+
com.thealgorithms.maths.JugglerSequence=UselessMainMethod
3256
com.thealgorithms.maths.KaprekarNumbers=UselessParentheses
33-
com.thealgorithms.maths.KeithNumber=UselessParentheses
57+
com.thealgorithms.maths.KeithNumber=UselessMainMethod,UselessParentheses
3458
com.thealgorithms.maths.LeonardoNumber=UselessParentheses
35-
com.thealgorithms.maths.LinearDiophantineEquationsSolver=UselessParentheses
59+
com.thealgorithms.maths.LinearDiophantineEquationsSolver=UselessMainMethod,UselessParentheses
60+
com.thealgorithms.maths.MagicSquare=UselessMainMethod
61+
com.thealgorithms.maths.PiNilakantha=UselessMainMethod
62+
com.thealgorithms.maths.Prime.PrimeCheck=UselessMainMethod
63+
com.thealgorithms.maths.PythagoreanTriple=UselessMainMethod
3664
com.thealgorithms.maths.RomanNumeralUtil=UselessParentheses
3765
com.thealgorithms.maths.SecondMinMax=UselessParentheses
3866
com.thealgorithms.maths.SecondMinMaxTest=UnnecessaryFullyQualifiedName
67+
com.thealgorithms.maths.SimpsonIntegration=UselessMainMethod
3968
com.thealgorithms.maths.StandardDeviation=UselessParentheses
4069
com.thealgorithms.maths.SumOfArithmeticSeries=UselessParentheses
41-
com.thealgorithms.maths.TrinomialTriangle=UselessParentheses
70+
com.thealgorithms.maths.TrinomialTriangle=UselessMainMethod,UselessParentheses
71+
com.thealgorithms.maths.VectorCrossProduct=UselessMainMethod
4272
com.thealgorithms.maths.Volume=UselessParentheses
73+
com.thealgorithms.matrix.RotateMatrixBy90Degrees=UselessMainMethod
4374
com.thealgorithms.misc.Sparsity=UselessParentheses
44-
com.thealgorithms.others.CRC16=UselessParentheses
45-
com.thealgorithms.others.Damm=UnnecessaryFullyQualifiedName
46-
com.thealgorithms.others.Luhn=UnnecessaryFullyQualifiedName
47-
com.thealgorithms.others.Mandelbrot=UselessParentheses
48-
com.thealgorithms.others.MiniMaxAlgorithm=UselessParentheses
49-
com.thealgorithms.others.PageRank=UselessParentheses
50-
com.thealgorithms.others.PerlinNoise=UselessParentheses
75+
com.thealgorithms.others.BankersAlgorithm=UselessMainMethod
76+
com.thealgorithms.others.BrianKernighanAlgorithm=UselessMainMethod
77+
com.thealgorithms.others.CRC16=UselessMainMethod,UselessParentheses
78+
com.thealgorithms.others.CRC32=UselessMainMethod
79+
com.thealgorithms.others.Damm=UnnecessaryFullyQualifiedName,UselessMainMethod
80+
com.thealgorithms.others.Dijkstra=UselessMainMethod
81+
com.thealgorithms.others.GaussLegendre=UselessMainMethod
82+
com.thealgorithms.others.HappyNumbersSeq=UselessMainMethod
83+
com.thealgorithms.others.Huffman=UselessMainMethod
84+
com.thealgorithms.others.InsertDeleteInArray=UselessMainMethod
85+
com.thealgorithms.others.KochSnowflake=UselessMainMethod
86+
com.thealgorithms.others.Krishnamurthy=UselessMainMethod
87+
com.thealgorithms.others.LinearCongruentialGenerator=UselessMainMethod
88+
com.thealgorithms.others.Luhn=UnnecessaryFullyQualifiedName,UselessMainMethod
89+
com.thealgorithms.others.Mandelbrot=UselessMainMethod,UselessParentheses
90+
com.thealgorithms.others.MiniMaxAlgorithm=UselessMainMethod,UselessParentheses
91+
com.thealgorithms.others.PageRank=UselessMainMethod,UselessParentheses
92+
com.thealgorithms.others.PerlinNoise=UselessMainMethod,UselessParentheses
5193
com.thealgorithms.others.QueueUsingTwoStacks=UselessParentheses
52-
com.thealgorithms.others.Trieac=UselessParentheses
53-
com.thealgorithms.others.Verhoeff=UnnecessaryFullyQualifiedName
94+
com.thealgorithms.others.Trieac=UselessMainMethod,UselessParentheses
95+
com.thealgorithms.others.Verhoeff=UnnecessaryFullyQualifiedName,UselessMainMethod
96+
com.thealgorithms.puzzlesandgames.Sudoku=UselessMainMethod
97+
com.thealgorithms.searches.HowManyTimesRotated=UselessMainMethod
5498
com.thealgorithms.searches.InterpolationSearch=UselessParentheses
5599
com.thealgorithms.searches.KMPSearch=UselessParentheses
56100
com.thealgorithms.searches.RabinKarpAlgorithm=UselessParentheses
101+
com.thealgorithms.searches.RecursiveBinarySearch=UselessMainMethod
102+
com.thealgorithms.sorts.BogoSort=UselessMainMethod
57103
com.thealgorithms.sorts.CircleSort=EmptyControlStatement
58104
com.thealgorithms.sorts.DutchNationalFlagSort=UselessParentheses
59105
com.thealgorithms.sorts.MergeSortNoExtraSpace=UselessParentheses
60106
com.thealgorithms.sorts.RadixSort=UselessParentheses
107+
com.thealgorithms.sorts.TreeSort=UselessMainMethod
61108
com.thealgorithms.sorts.WiggleSort=UselessParentheses
109+
com.thealgorithms.stacks.LargestRectangle=UselessMainMethod
110+
com.thealgorithms.stacks.MaximumMinimumWindow=UselessMainMethod
62111
com.thealgorithms.stacks.PostfixToInfix=UselessParentheses
112+
com.thealgorithms.strings.Alphabetical=UselessMainMethod
63113
com.thealgorithms.strings.HorspoolSearch=UnnecessaryFullyQualifiedName,UselessParentheses
114+
com.thealgorithms.strings.KMP=UselessMainMethod
115+
com.thealgorithms.strings.Lower=UselessMainMethod
64116
com.thealgorithms.strings.Palindrome=UselessParentheses
117+
com.thealgorithms.strings.Pangram=UselessMainMethod
118+
com.thealgorithms.strings.RabinKarp=UselessMainMethod
119+
com.thealgorithms.strings.Rotation=UselessMainMethod
120+
com.thealgorithms.strings.Upper=UselessMainMethod

pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,10 @@
143143
<artifactId>maven-pmd-plugin</artifactId>
144144
<version>3.26.0</version>
145145
<configuration>
146+
<rulesets>
147+
<ruleset>/rulesets/java/maven-pmd-plugin-default.xml</ruleset>
148+
<ruleset>file://${basedir}/pmd-custom_ruleset.xml</ruleset>
149+
</rulesets>
146150
<printFailingErrors>true</printFailingErrors>
147151
<includeTests>true</includeTests>
148152
<linkXRef>false</linkXRef>

0 commit comments

Comments
 (0)