@codacy/tools-pmd-6
v0.5.0
Published
Pmd tool adapter for Codacy analysis
Readme
@codacy/tools-pmd-6
Table of Contents
Overview
PMD 6 adapter for Codacy analysis. PMD is a multi-language static analysis tool that finds common programming flaws such as unused variables, empty catch blocks, and unnecessary object creation. This adapter wraps PMD 6.55.0 (the final 6.x release) as a CLI child process.
| Property | Value |
| ------------- | ---------------------------------------------------------------------------- |
| Tool ID | PMD |
| Codacy UUID | 9ed24812-b6ee-4a58-9004-0ed183c45b8f |
| Strategy | CLI (child process, JVM-based) |
| Languages | Java, Javascript, PLSQL, XML, Apex, Velocity, VisualForce, JSP |
| File patterns | **/*.java, **/*.js, **/*.sql, **/*.xml, **/*.cls, **/*.jsp, etc. |
| Runtime | Java 8+ |
Updating patterns
# Re-fetch pattern metadata from the Codacy API
pnpm prefetch
# Commit the result
git add src/patterns.jsonUpdating the PMD version
PMD 6.55.0 is the final PMD 6.x release. No further updates will be made to PMD 6.
For PMD 7.x, see the pmd-7 adapter package.
Development
pnpm build # Build with tsup
pnpm test # Run testsTo run integration tests, ensure Java 8+ and the PMD 6 distribution are available on your PATH. Tests requiring the real binary are automatically skipped when PMD is not present.
Notes for maintainers
Preset mappings (
src/pattern-mappings.json): the JUnit and EJB rules are gated. TheJUnit4*rules go tojunit(the Mavenjunit:junitartifact, i.e. JUnit 3/4) andJUnit5TestShouldBePackagePrivatetojunit-5(junit-jupiter), so a JUnit-5-only project no longer gets JUnit-4 annotation advice. The version-agnostic ones (JUnitAssertions*,JUnitTest*,DetachedTestCase,TestClassWithoutTestCases) are claimed by both keys, whichfilterAutoPatternstreats as an OR. Three were default-on (JUnitSpelling,JUnitStaticSuite,JUnitTestsShouldIncludeAssert) and now stay out of a Java repo with no test framework. The five session-bean naming rules plusStaticEJBFieldShouldBeFinalgate onjakarta-ee, matched from the EJB/Jakarta EE API jars under every name they have shipped as.Detection had to learn
spring-boot-starter-test(which pulls JUnit 5 transitively and is the only test declaration most Spring projects have), thejunit-jupiter-/junit-platform-per-role artifacts, and Gradle'stestRuntimeOnlyverb — without those, gating these default-on rules would have lost them for every Spring Boot repo.CLI entry point differs from PMD 7: PMD 6 uses
bin/run.sh pmd ...(withpmdas the first argument torun.sh), while PMD 7 usesbin/pmd check ....Fail flag syntax: PMD 6 uses
--fail-on-violation false(flag + value), while PMD 7 uses--no-fail-on-violation(single flag).No progress bar flag: PMD 6 does not support
--no-progress.Filtered extensions:
.jsx,.jsm, and.vuefiles are filtered out before analysis because PMD 6's JavaScript engine (Mozilla Rhino) cannot parse them.Language terse names: PMD 6 uses
vmfor Velocity andvffor VisualForce (PMD 7 usesvelocityandvisualforce). This affects pattern ID matching.No Kotlin/Swift/TypeScript: These languages were added in PMD 7 only.
JSON output: The
processingErrorsandconfigurationErrorsfields may be absent in PMD 6's JSON output (they are optional in the adapter's type definition).
