An extensible multilanguage static code analyzer that finds common programming flaws and duplicated code across 20+ languages.
PMD is an extensible multilanguage static code analyzer that scans source code to identify common programming flaws like unused variables, empty catch blocks, and unnecessary object creation. It supports over 20 programming languages, including Java, JavaScript, Kotlin, and Swift, and includes a copy-paste detector (CPD) to find duplicated code.
Developers and teams working on multilanguage projects who need automated code quality checks, especially those using Java, Apex, or other supported languages for enterprise or open-source software.
PMD offers a highly extensible framework with 400+ built-in rules and support for custom rule creation, making it a versatile choice for teams needing tailored static analysis across multiple programming languages.
An extensible multilanguage static code analyzer.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Analyzes over 20 languages including Java, JavaScript, and Swift, with built-in rules for many, making it versatile for multilanguage codebases as noted in the README.
Comes with 400+ pre-configured rules for common flaws like unused variables and empty catch blocks, reducing manual code review effort as highlighted in the features.
Includes CPD to find duplicated code across 30+ languages, aiding in maintaining code quality and reducing redundancy, as specified in the README.
Allows custom rule creation using Java or XPath queries, enabling teams to tailor analysis to project-specific needs, per the extensible architecture description.
Core focus is on Java and Apex, with limited or no rules for some supported languages like Scala, reducing effectiveness for non-Java projects as admitted in the README.
Requires downloading and extracting binaries rather than simple package manager installs, which can be cumbersome for CI/CD integration compared to tools like ESLint or Pylint.
AST-based analysis can generate noise, requiring manual rule tuning to avoid irrelevant warnings, a common trade-off in static analysis tools not explicitly addressed in documentation.