chore: configure PMD to detect main methods (#6289)

This commit is contained in:
Piotr Idzik
2025-06-11 15:52:58 +02:00
committed by GitHub
parent e41c2b9456
commit 20f04929be
3 changed files with 103 additions and 15 deletions

28
pmd-custom_ruleset.xml Normal file
View File

@@ -0,0 +1,28 @@
<?xml version="1.0"?>
<ruleset name="TheAlgorithms/Java ruleset"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>
Custom PMD checks for TheAlgorithms/Java
</description>
<rule name="UselessMainMethod"
language="java"
message="The main method is redundant in this context"
class="net.sourceforge.pmd.lang.rule.xpath.XPathRule">
<description>
Avoid using the main method.
</description>
<priority>3</priority>
<properties>
<property name="xpath">
<value>
<![CDATA[
//MethodDeclaration[@Name = "main"]
]]>
</value>
</property>
</properties>
</rule>
</ruleset>

View File

@@ -1,64 +1,120 @@
com.thealgorithms.ciphers.AES=UselessMainMethod
com.thealgorithms.ciphers.AESEncryption=UselessMainMethod
com.thealgorithms.ciphers.AffineCipher=UselessParentheses
com.thealgorithms.ciphers.DES=UselessParentheses
com.thealgorithms.ciphers.ProductCipher=UselessMainMethod
com.thealgorithms.ciphers.RSA=UselessParentheses
com.thealgorithms.conversions.AnyBaseToAnyBase=UselessParentheses
com.thealgorithms.conversions.AnyBaseToAnyBase=UselessMainMethod,UselessParentheses
com.thealgorithms.conversions.AnytoAny=UselessParentheses
com.thealgorithms.conversions.RgbHsvConversion=UselessMainMethod
com.thealgorithms.datastructures.crdt.Pair=UnusedPrivateField
com.thealgorithms.datastructures.graphs.AStar=UselessParentheses
com.thealgorithms.datastructures.graphs.AdjacencyMatrixGraph=CollapsibleIfStatements,UnnecessaryFullyQualifiedName,UselessParentheses
com.thealgorithms.datastructures.graphs.BellmanFord=UselessMainMethod
com.thealgorithms.datastructures.graphs.BipartiteGraphDFS=CollapsibleIfStatements
com.thealgorithms.datastructures.graphs.ConnectedComponent=UselessMainMethod
com.thealgorithms.datastructures.graphs.Cycles=UselessMainMethod
com.thealgorithms.datastructures.graphs.Graphs=UselessMainMethod
com.thealgorithms.datastructures.graphs.KahnsAlgorithm=UselessMainMethod
com.thealgorithms.datastructures.graphs.MatrixGraphs=UselessMainMethod
com.thealgorithms.datastructures.hashmap.hashing.HashMapCuckooHashing=UselessParentheses
com.thealgorithms.datastructures.hashmap.hashing.MainCuckooHashing=UselessMainMethod
com.thealgorithms.datastructures.heaps.FibonacciHeap=UselessParentheses
com.thealgorithms.datastructures.heaps.HeapNode=UselessParentheses
com.thealgorithms.datastructures.lists.DoublyLinkedList=UselessParentheses
com.thealgorithms.datastructures.lists.Link=UselessMainMethod
com.thealgorithms.datastructures.lists.RandomNode=UselessMainMethod
com.thealgorithms.datastructures.lists.SearchSinglyLinkedListRecursion=UselessParentheses
com.thealgorithms.datastructures.lists.SinglyLinkedList=UnusedLocalVariable
com.thealgorithms.datastructures.lists.SinglyLinkedList=UnusedLocalVariable,UselessMainMethod
com.thealgorithms.datastructures.queues.Deque=UselessMainMethod
com.thealgorithms.datastructures.queues.PriorityQueue=UselessParentheses
com.thealgorithms.datastructures.trees.BSTRecursiveGeneric=UselessMainMethod
com.thealgorithms.datastructures.trees.CheckBinaryTreeIsValidBST=UselessParentheses
com.thealgorithms.datastructures.trees.LCA=UselessMainMethod
com.thealgorithms.datastructures.trees.NearestRightKey=UselessMainMethod
com.thealgorithms.datastructures.trees.PrintTopViewofTree=UselessMainMethod
com.thealgorithms.datastructures.trees.SegmentTree=UselessParentheses
com.thealgorithms.devutils.nodes.LargeTreeNode=UselessParentheses
com.thealgorithms.devutils.nodes.SimpleNode=UselessParentheses
com.thealgorithms.devutils.nodes.SimpleTreeNode=UselessParentheses
com.thealgorithms.devutils.nodes.TreeNode=UselessParentheses
com.thealgorithms.divideandconquer.ClosestPair=UnnecessaryFullyQualifiedName,UselessParentheses
com.thealgorithms.divideandconquer.ClosestPair=UnnecessaryFullyQualifiedName,UselessMainMethod,UselessParentheses
com.thealgorithms.divideandconquer.Point=UselessParentheses
com.thealgorithms.dynamicprogramming.CatalanNumber=UselessMainMethod
com.thealgorithms.dynamicprogramming.EggDropping=UselessMainMethod
com.thealgorithms.dynamicprogramming.LongestPalindromicSubsequence=UselessMainMethod
com.thealgorithms.dynamicprogramming.WineProblem=UselessParentheses
com.thealgorithms.maths.BinomialCoefficient=UselessParentheses
com.thealgorithms.maths.Complex=UselessParentheses
com.thealgorithms.maths.DistanceFormulaTest=UnnecessaryFullyQualifiedName
com.thealgorithms.maths.EulerMethod=UselessMainMethod
com.thealgorithms.maths.GCDRecursion=UselessMainMethod
com.thealgorithms.maths.Gaussian=UselessParentheses
com.thealgorithms.maths.GcdSolutionWrapper=UselessParentheses
com.thealgorithms.maths.HeronsFormula=UselessParentheses
com.thealgorithms.maths.JugglerSequence=UselessMainMethod
com.thealgorithms.maths.KaprekarNumbers=UselessParentheses
com.thealgorithms.maths.KeithNumber=UselessParentheses
com.thealgorithms.maths.KeithNumber=UselessMainMethod,UselessParentheses
com.thealgorithms.maths.LeonardoNumber=UselessParentheses
com.thealgorithms.maths.LinearDiophantineEquationsSolver=UselessParentheses
com.thealgorithms.maths.LinearDiophantineEquationsSolver=UselessMainMethod,UselessParentheses
com.thealgorithms.maths.MagicSquare=UselessMainMethod
com.thealgorithms.maths.PiNilakantha=UselessMainMethod
com.thealgorithms.maths.Prime.PrimeCheck=UselessMainMethod
com.thealgorithms.maths.PythagoreanTriple=UselessMainMethod
com.thealgorithms.maths.RomanNumeralUtil=UselessParentheses
com.thealgorithms.maths.SecondMinMax=UselessParentheses
com.thealgorithms.maths.SecondMinMaxTest=UnnecessaryFullyQualifiedName
com.thealgorithms.maths.SimpsonIntegration=UselessMainMethod
com.thealgorithms.maths.StandardDeviation=UselessParentheses
com.thealgorithms.maths.SumOfArithmeticSeries=UselessParentheses
com.thealgorithms.maths.TrinomialTriangle=UselessParentheses
com.thealgorithms.maths.TrinomialTriangle=UselessMainMethod,UselessParentheses
com.thealgorithms.maths.VectorCrossProduct=UselessMainMethod
com.thealgorithms.maths.Volume=UselessParentheses
com.thealgorithms.matrix.RotateMatrixBy90Degrees=UselessMainMethod
com.thealgorithms.misc.Sparsity=UselessParentheses
com.thealgorithms.others.CRC16=UselessParentheses
com.thealgorithms.others.Damm=UnnecessaryFullyQualifiedName
com.thealgorithms.others.Luhn=UnnecessaryFullyQualifiedName
com.thealgorithms.others.Mandelbrot=UselessParentheses
com.thealgorithms.others.MiniMaxAlgorithm=UselessParentheses
com.thealgorithms.others.PageRank=UselessParentheses
com.thealgorithms.others.PerlinNoise=UselessParentheses
com.thealgorithms.others.BankersAlgorithm=UselessMainMethod
com.thealgorithms.others.BrianKernighanAlgorithm=UselessMainMethod
com.thealgorithms.others.CRC16=UselessMainMethod,UselessParentheses
com.thealgorithms.others.CRC32=UselessMainMethod
com.thealgorithms.others.Damm=UnnecessaryFullyQualifiedName,UselessMainMethod
com.thealgorithms.others.Dijkstra=UselessMainMethod
com.thealgorithms.others.GaussLegendre=UselessMainMethod
com.thealgorithms.others.HappyNumbersSeq=UselessMainMethod
com.thealgorithms.others.Huffman=UselessMainMethod
com.thealgorithms.others.InsertDeleteInArray=UselessMainMethod
com.thealgorithms.others.KochSnowflake=UselessMainMethod
com.thealgorithms.others.Krishnamurthy=UselessMainMethod
com.thealgorithms.others.LinearCongruentialGenerator=UselessMainMethod
com.thealgorithms.others.Luhn=UnnecessaryFullyQualifiedName,UselessMainMethod
com.thealgorithms.others.Mandelbrot=UselessMainMethod,UselessParentheses
com.thealgorithms.others.MiniMaxAlgorithm=UselessMainMethod,UselessParentheses
com.thealgorithms.others.PageRank=UselessMainMethod,UselessParentheses
com.thealgorithms.others.PerlinNoise=UselessMainMethod,UselessParentheses
com.thealgorithms.others.QueueUsingTwoStacks=UselessParentheses
com.thealgorithms.others.Trieac=UselessParentheses
com.thealgorithms.others.Verhoeff=UnnecessaryFullyQualifiedName
com.thealgorithms.others.Trieac=UselessMainMethod,UselessParentheses
com.thealgorithms.others.Verhoeff=UnnecessaryFullyQualifiedName,UselessMainMethod
com.thealgorithms.puzzlesandgames.Sudoku=UselessMainMethod
com.thealgorithms.searches.HowManyTimesRotated=UselessMainMethod
com.thealgorithms.searches.InterpolationSearch=UselessParentheses
com.thealgorithms.searches.KMPSearch=UselessParentheses
com.thealgorithms.searches.RabinKarpAlgorithm=UselessParentheses
com.thealgorithms.searches.RecursiveBinarySearch=UselessMainMethod
com.thealgorithms.sorts.BogoSort=UselessMainMethod
com.thealgorithms.sorts.CircleSort=EmptyControlStatement
com.thealgorithms.sorts.DutchNationalFlagSort=UselessParentheses
com.thealgorithms.sorts.MergeSortNoExtraSpace=UselessParentheses
com.thealgorithms.sorts.RadixSort=UselessParentheses
com.thealgorithms.sorts.TreeSort=UselessMainMethod
com.thealgorithms.sorts.WiggleSort=UselessParentheses
com.thealgorithms.stacks.LargestRectangle=UselessMainMethod
com.thealgorithms.stacks.MaximumMinimumWindow=UselessMainMethod
com.thealgorithms.stacks.PostfixToInfix=UselessParentheses
com.thealgorithms.strings.Alphabetical=UselessMainMethod
com.thealgorithms.strings.HorspoolSearch=UnnecessaryFullyQualifiedName,UselessParentheses
com.thealgorithms.strings.KMP=UselessMainMethod
com.thealgorithms.strings.Lower=UselessMainMethod
com.thealgorithms.strings.Palindrome=UselessParentheses
com.thealgorithms.strings.Pangram=UselessMainMethod
com.thealgorithms.strings.RabinKarp=UselessMainMethod
com.thealgorithms.strings.Rotation=UselessMainMethod
com.thealgorithms.strings.Upper=UselessMainMethod

View File

@@ -143,6 +143,10 @@
<artifactId>maven-pmd-plugin</artifactId>
<version>3.26.0</version>
<configuration>
<rulesets>
<ruleset>/rulesets/java/maven-pmd-plugin-default.xml</ruleset>
<ruleset>file://${basedir}/pmd-custom_ruleset.xml</ruleset>
</rulesets>
<printFailingErrors>true</printFailingErrors>
<includeTests>true</includeTests>
<linkXRef>false</linkXRef>