Summary of language configuration options and properties
Table of Contents Language propertiesSince PMD 7.0.0, languages may be directly configured via properties. The properties can be specified via environment variables or programmatically.
The name of the environment variables follow the following pattern, completely in uppercase:
PMD_<LanguageId>_<PropertyName>
LanguageId is the short name of the language, which is being configured. This is e.g. âJAVAâ or âAPEXâ.
PropertyName is the name of the property converted to SCREAMING_SNAKE_CASE, that is set to a specific value, e.g. âSUPPRESS_MARKERâ for âsuppressMarkerâ.
As a convention, properties whose name start with an x are internal and may be removed or changed without notice.
Properties whose name start with CPD are used to configure CPD CpdLexer options.
Programmatically, the language properties can be set on PMDConfiguration
(or CPDConfiguration
) before using the PmdAnalysis
(or CpdAnalysis
) instance to start the analysis:
PMDConfiguration configuration = new PMDConfiguration();
LanguagePropertyBundle properties = configuration.getLanguageProperties(LanguageRegistry.PMD.getLanguageById("java"));
properties.setProperty(LanguagePropertyBundle.SUPPRESS_MARKER, "PMD");
Common language properties
All languages support the following properties:
suppressMarker
: A string to detect suppression comments. The default is NOPMD
, so e.g. in Java, a comment // NOPMD
will suppress warnings on the same line.
This property can also be set via the CLI option --suppress-marker
. The CLI option applies for all languages and overrides any language property.
version
: The language version PMD should use when parsing source code. If not specified, the default version of the language will be used.
This property can also be set via the CLI option --use-version
.
Many languages support the following properties, which are centrally defined in CpdLanguageProperties
:
cpdIgnoreLiteralSequences
: Ignore sequences of literals, eg 0, 0, 0, 0
.
This property can also be set via the CLI option --ignore-literal-sequences
.
cpdIgnoreLiteralAndIdentifierSequences
: Ignore sequences of literals and identifiers, eg a, b, 0, 0
.
This property can also be set via the CLI option --ignore-sequences
.
cpdAnonymizeLiterals
: Anonymize literals. They are still part of the token stream but all literals appear to have the same value.
This property can also be set via the CLI option --ignore-literals
.
cpdAnonymizeIdentifiers
: Anonymize identifiers. They are still part of the token stream but all identifiers appear to have the same value.
This property can also be set via the CLI option --ignore-identifiers
.
cpdIgnoreImports
: Ignore import statements and equivalent (eg using statements in C#).
This property can also be set via the CLI option --ignore-usings
.
cpdIgnoreMetadata
: Ignore metadata such as Java annotations or C# attributes.
This property can also be set via the CLI option --ignore-annotations
.
Note: CPDConfiguration
has convenience methods to control these options, e.g. setIgnoreAnnotations
.
The Java language can be configured with the following properties:
auxClasspath
: Classpath on which to find compiled classes for the language
This property can also be set via the CLI option --aux-classpath
.
Environment variable: PMD_JAVA_AUX_CLASSPATH
xTypeInferenceLogging
: Verbosity of type inference logging, possible values DISABLED
, SIMPLE
, VERBOSE
.
Since 7.0.0
Environment variable: PMD_JAVA_X_TYPE_INFERENCE_LOGGING
Default: âDISABLEDâ
xStrictTypeRes
: Whether to perform type resolution strictly at the start of execution or not.
Since: 7.5.0
Environment variable: PMD_JAVA_X_STRICT_TYPE_RES
Default: âtrueâ
lombok
: Whether to consider lombok-specific things in core facilities like type inference. Disable this option if you want to analyze the AST as it would appear before the lombok pre-processing is applied. For instance, with this option enabled, variables declared with type lombok.val will have their type inferred based on the right-hand-side. With the option disabled, the variable will have type lombok.val instead. See issue #3119.
Since: 7.12.0
Environment variable: PMD_JAVA_LOMBOK
Default: âtrueâ
rootDirectory
: With this property the root directory of the Salesforce metadata, where sfdx-project.json
resides, is specified. ApexLink can then load all the classes in the project and figure out, whether a method is used or not.
This property is needed for UnusedMethod
.
Environment variable: PMD_APEX_ROOT_DIRECTORY
apexDirectories
: Comma separated list of directories for Apex classes. Absolute or relative to the Visualforce directory. Default is ../classes
. Specifying an empty string will disable data type resolution for Apex Controller properties.
Environment variable: PMD_VISUALFORCE_APEX_DIRECTORIES
objectsDirectories
: Comma separated list of directories for Custom Objects. Absolute or relative to the Visualforce directory. Default is ../objects
. Specifying an empty string will disable data type resolution for Custom Object fields.
Environment variable: PMD_VISUALFORCE_OBJECTS_DIRECTORIES
cpdSkipBlocksPattern
: Specifies a start and end delimiter for CPD to completely ignore. The delimiters are separated by a pipe |
. The default skips code that is conditionally compiled out. Set this property to empty to disable this.
This property can also be set via the CLI option --skip-blocks-pattern
.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4