PMD¶
PMD is a static analysis tool that provides a variety of checkers for many languages.
Supported Versions¶
Review Bot supports both the 6.x and 7.x major versions of PMD.
Supported File Types¶
The following are supported by this tool:
Apex:
*.cls
C/C++:
*.c
,*.cc
,*.cpp
,*.cxx
,*.C
,*.h
,*.hpp
,*.hxx
C#:
*.cs
Dart:
*.dart
Fortran:
*.f
,*.f66
,*.f77
,*.f90
,*.for
Go:
*.go
Groovy:
*.groovy
Java:
*.java
JavaScript:
*.js
Java Server Pages:
*.jsp
,*.jspf
,*.jspx
,*.tag
Kotlin:
*.kt
Lua:
*.lua
Matlab:
*.m
Modelica:
*.mo
Objective-C:
*.h
,*.m
Perl:
*.plm
,*.pm
,*.t
PHP:
*.class
,*.php
PL/SQL:
*.fnc
,*.pkb
,*.pkh
,*.pks
,*.plb
,*.pld
,*.plh
,*.pls
,*.prc
,*.sql
,*.tpb
,*.tps
,*.trg
,*.tyb
,*.typ
Python:
*.py
Ruby:
*.cgi
,*.class
,*.rb
Scala:
*.scala
Swift:
*.swift
VisualForce:
*.component
,*.page
VM:
*.vm
XML:
*.xml
It may also scan other file extensions to see if they appear to be one of the languages above.
PMD can be configured to match only specific file types.
Installation¶
PMD can be installed through many system package managers, or downloaded and installed manually.
Configuration¶
PMD Location¶
Because there are a variety of methods to install PMD, there’s no consistent location (or name) of the PMD executable. If installed through a package manager, it can often be invoked via pmd. If installed manually, it’s invoked via run.sh.
If it’s not named pmd, or can’t be found in Review Bot’s
PATH
environment variable, then you’ll need to specify the path
in the Review Bot worker config file:
exe_paths = {
'pmd': '/path/to/pmd',
}
You will need to restart the Review Bot worker after making this change.
Note
This setting was renamed in Review Bot 3.0.
In Review Bot 2.0, this setting was called pmd_path
. For consistency,
the old setting was deprecated in 3.0, and will be removed in 4.0.
Enabling PMD in Review Board¶
First, you’ll need to add a Review Bot configuration in Review Board (see Tool Configurations).
The following configuration options are available:
- Rulesets (required):
This can be one of the following:
A comma-separated list of PMD rulesets to apply (equivalent to pmd -rulesets ...).
A full PMD ruleset configuration file (starting with
<?xml ...?>
).
- Scan files (optional):
A comma-separated list of file extensions to scan. Only files in the diff that match these file extensions will trigger the PMD configuration.
If not provided, the tool will be ran for all files in the diff.
For example:
c,js,py