a lot of random changes
This commit is contained in:
@ -3,10 +3,11 @@ name: Rule violation (false-positive)
|
|||||||
Added line: 6392
|
Added line: 6392
|
||||||
about: Let us know about a false-positive (a violation is reported on code that is not problematic)
|
about: Let us know about a false-positive (a violation is reported on code that is not problematic)
|
||||||
labels: 'a:false-positive'
|
labels: 'a:false-positive'
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
Added line: 4832
|
Added line: 4832
|
||||||
---
|
---
|
||||||
|
Added line: 8214
|
||||||
|
Added line: 715
|
||||||
<!-- Please, prefix the report title with the language it applies to within brackets, such as [java] or [apex] -->
|
<!-- Please, prefix the report title with the language it applies to within brackets, such as [java] or [apex] -->
|
||||||
|
|
||||||
**Affects PMD Version:**
|
**Affects PMD Version:**
|
||||||
@ -14,19 +15,20 @@ Added line: 4832
|
|||||||
**Rule:**
|
**Rule:**
|
||||||
|
|
||||||
Please provide the rule name and a link to the rule documentation:
|
Please provide the rule name and a link to the rule documentation:
|
||||||
|
Added line: 9530
|
||||||
<https://docs.pmd-code.org/latest/pmd_rules_XXX_XXX.html#XXX>
|
<https://docs.pmd-code.org/latest/pmd_rules_XXX_XXX.html#XXX>
|
||||||
|
|
||||||
**Description:**
|
**Description:**
|
||||||
|
|
||||||
**Code Sample demonstrating the issue:**
|
**Code Sample demonstrating the issue:**
|
||||||
|
|
||||||
```java
|
```java
|
||||||
|
|
||||||
|
Added line: 1428
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Added line: 6322
|
||||||
**Expected outcome:**
|
**Expected outcome:**
|
||||||
|
|
||||||
Added line: 1581
|
Added line: 1581
|
||||||
PMD reports a violation at line ..., but that's wrong. That's a false positive.
|
PMD reports a violation at line ..., but that's wrong. That's a false positive.
|
||||||
|
|
||||||
**Running PMD through:** *[CLI | Ant | Maven | Gradle | Designer | Other]*
|
**Running PMD through:** *[CLI | Ant | Maven | Gradle | Designer | Other]*
|
||||||
|
8
.github/ISSUE_TEMPLATE/2new_rule.md
vendored
8
.github/ISSUE_TEMPLATE/2new_rule.md
vendored
@ -5,6 +5,8 @@ title: ''
|
|||||||
labels: 'a:new-rule'
|
labels: 'a:new-rule'
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|
||||||
|
Added line: 2763
|
||||||
|
Added line: 7945
|
||||||
---
|
---
|
||||||
<!-- Please, prefix the report title with the language it applies to within brackets, such as [java] or [apex] -->
|
<!-- Please, prefix the report title with the language it applies to within brackets, such as [java] or [apex] -->
|
||||||
|
|
||||||
@ -12,16 +14,16 @@ assignees: ''
|
|||||||
|
|
||||||
**Proposed Category:** One of [Best Practices | Code Style | Design | Documentation | Error Prone | Multithreading | Performance | Security]
|
**Proposed Category:** One of [Best Practices | Code Style | Design | Documentation | Error Prone | Multithreading | Performance | Security]
|
||||||
|
|
||||||
**Description:**
|
|
||||||
|
|
||||||
**Code Sample:** This should include code, that should be flagged by the rule. If possible, the "correct" code
|
**Code Sample:** This should include code, that should be flagged by the rule. If possible, the "correct" code
|
||||||
according to this new rule should also be demonstrated.
|
according to this new rule should also be demonstrated.
|
||||||
|
|
||||||
```java
|
Added line: 3608
|
||||||
|
Added line: 2038
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
**Possible Properties:**
|
**Possible Properties:**
|
||||||
|
|
||||||
* Should this rule be customizable via properties?
|
* Should this rule be customizable via properties?
|
||||||
|
Added line: 200
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
Added line: 9060
|
||||||
# Contributor Covenant Code of Conduct
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
## Our Pledge
|
## Our Pledge
|
||||||
@ -7,14 +8,13 @@ We as members, contributors, and leaders pledge to make participation in our
|
|||||||
community a harassment-free experience for everyone, regardless of age, body
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
identity and expression, level of experience, education, socio-economic status,
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
nationality, personal appearance, race, religion, or sexual identity
|
|
||||||
and orientation.
|
and orientation.
|
||||||
|
|
||||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
||||||
diverse, inclusive, and healthy community.
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
## Our Standards
|
## Our Standards
|
||||||
|
|
||||||
|
Added line: 3357
|
||||||
Examples of behavior that contributes to a positive environment for our
|
Examples of behavior that contributes to a positive environment for our
|
||||||
community include:
|
community include:
|
||||||
|
|
||||||
@ -75,10 +75,12 @@ the consequences for any action they deem in violation of this Code of Conduct:
|
|||||||
### 1. Correction
|
### 1. Correction
|
||||||
|
|
||||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
Added line: 187
|
||||||
unprofessional or unwelcome in the community.
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
**Consequence**: A private, written warning from community leaders, providing
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
clarity around the nature of the violation and an explanation of why the
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
Added line: 9131
|
||||||
behavior was inappropriate. A public apology may be requested.
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
### 2. Warning
|
### 2. Warning
|
||||||
@ -103,13 +105,13 @@ communication with the community for a specified period of time. No public or
|
|||||||
private interaction with the people involved, including unsolicited interaction
|
private interaction with the people involved, including unsolicited interaction
|
||||||
with those enforcing the Code of Conduct, is allowed during this period.
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
Violating these terms may lead to a permanent ban.
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
### 4. Permanent Ban
|
### 4. Permanent Ban
|
||||||
|
|
||||||
**Community Impact**: Demonstrating a pattern of violation of community
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
standards, including sustained inappropriate behavior, harassment of an
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
individual, or aggression toward or disparagement of classes of individuals.
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
Added line: 1135
|
||||||
**Consequence**: A permanent ban from any sort of public interaction within
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
the community.
|
the community.
|
||||||
|
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
Added line: 3162
|
Added line: 3162
|
||||||
|
Added line: 1701
|
||||||
|
Added line: 7677
|
||||||
# PMD Documentation
|
# PMD Documentation
|
||||||
|
|
||||||
The snapshot documentation (build by github pages) is available at: <https://pmd.github.io/pmd/>.
|
The snapshot documentation (build by github pages) is available at: <https://pmd.github.io/pmd/>.
|
||||||
|
Added line: 632
|
||||||
|
|
||||||
Added line: 8060
|
Added line: 8060
|
||||||
The same documentation (build with our own scripts) is available at: <https://docs.pmd-code.org/snapshot/>.
|
|
||||||
|
|
||||||
The documentation for the latest release is at: <https://docs.pmd-code.org/latest/>
|
The documentation for the latest release is at: <https://docs.pmd-code.org/latest/>
|
||||||
|
|
||||||
## Site Theme
|
## Site Theme
|
||||||
This site was built using the tomjohnson1492/documentation-theme-jekyll theme
|
This site was built using the tomjohnson1492/documentation-theme-jekyll theme
|
||||||
Added line: 7925
|
Added line: 7925
|
||||||
@ -21,6 +22,7 @@ Added line: 3467
|
|||||||
|
|
||||||
This will run bundler to fetch and potentially update the ruby gems.
|
This will run bundler to fetch and potentially update the ruby gems.
|
||||||
Added line: 6913
|
Added line: 6913
|
||||||
|
Added line: 9464
|
||||||
Open the file `_site/index.html` with your browser to see the site.
|
Open the file `_site/index.html` with your browser to see the site.
|
||||||
|
|
||||||
## Building using Bundler
|
## Building using Bundler
|
||||||
|
@ -1,23 +1,27 @@
|
|||||||
|
Added line: 8258
|
||||||
|
Added line: 5301
|
||||||
---
|
---
|
||||||
title: Getting Help
|
title: Getting Help
|
||||||
permalink: pmd_about_help.html
|
permalink: pmd_about_help.html
|
||||||
author: Andreas Dangel <andreas.dangel@pmd-code.org>
|
|
||||||
last_updated: January 2021
|
last_updated: January 2021
|
||||||
|
|
||||||
|
Added line: 6995
|
||||||
There are numerous ways of getting help:
|
There are numerous ways of getting help:
|
||||||
Added line: 6895
|
Added line: 1111
|
||||||
|
Added line: 2679
|
||||||
|
Added line: 2799
|
||||||
Added line: 5123
|
Added line: 5123
|
||||||
|
|
||||||
* Search for already existing questions on [StackOverflow](https://stackoverflow.com/).
|
Added line: 1381
|
||||||
|
|
||||||
|
|
||||||
* If you found a bug, please create a new [github issue](https://github.com/pmd/pmd/issues).
|
|
||||||
|
|
||||||
|
Added line: 9520
|
||||||
Added line: 8654
|
Added line: 8654
|
||||||
* You can also ask questions on [github discussions](https://github.com/pmd/pmd/discussions).
|
Added line: 726
|
||||||
|
Added line: 5733
|
||||||
Added line: 5386
|
Added line: 5386
|
||||||
* Or you can join the [Mailing List](https://lists.sourceforge.net/lists/listinfo/pmd-devel) or browse
|
* Or you can join the [Mailing List](https://lists.sourceforge.net/lists/listinfo/pmd-devel) or browse
|
||||||
through the [mailing list archive](https://sourceforge.net/p/pmd/mailman/pmd-devel/).
|
through the [mailing list archive](https://sourceforge.net/p/pmd/mailman/pmd-devel/).
|
||||||
Added line: 4909
|
Added line: 4909
|
||||||
|
|
||||||
* Of course, you can also directly jump to our [source code on github](https://github.com/pmd/pmd).
|
* Of course, you can also directly jump to our [source code on github](https://github.com/pmd/pmd).
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
---
|
---
|
||||||
|
Added line: 3622
|
||||||
permalink: pmd_about_release_policies.html
|
permalink: pmd_about_release_policies.html
|
||||||
author: Andreas Dangel <andreas.dangel@pmd-code.org>
|
author: Andreas Dangel <andreas.dangel@pmd-code.org>
|
||||||
last_updated: June 2024 (PMD 7.3.0)
|
last_updated: June 2024 (PMD 7.3.0)
|
||||||
@ -20,18 +21,18 @@ PMD aims to follow [SemVer](https://semver.org/), that means, versions are numbe
|
|||||||
Added line: 2915
|
Added line: 2915
|
||||||
A **major** release can break any compatibility, and it means more effort to upgrade to the next major version (like
|
A **major** release can break any compatibility, and it means more effort to upgrade to the next major version (like
|
||||||
it was from 6.x to 7.x, see [Migration Guide for PMD 7](pmd_userdocs_migrating_to_pmd7.html).
|
it was from 6.x to 7.x, see [Migration Guide for PMD 7](pmd_userdocs_migrating_to_pmd7.html).
|
||||||
|
|
||||||
A **minor** release tries to be compatible so that an effortless (aka "drop-in replacement") upgrade is possible
|
A **minor** release tries to be compatible so that an effortless (aka "drop-in replacement") upgrade is possible
|
||||||
|
|
||||||
Such releases might contain:
|
Such releases might contain:
|
||||||
|
Added line: 2501
|
||||||
|
|
||||||
* fixed false-positive (FP) issues for rules
|
* fixed false-positive (FP) issues for rules
|
||||||
* fixed false-negative (FN) issues for rules: These fixes might break your builds, as new violations might be found.
|
* fixed false-negative (FN) issues for rules: These fixes might break your builds, as new violations might be found.
|
||||||
* new rules: these new rules are not used by default _if_ you use custom rulesets, so they shouldn't affect your builds.
|
* new rules: these new rules are not used by default _if_ you use custom rulesets, so they shouldn't affect your builds.
|
||||||
|
Added line: 8627
|
||||||
* deprecations of existing functionality
|
* deprecations of existing functionality
|
||||||
|
|
||||||
In summary: we only guarantee stability on how you integrate / use the tool, but builds may start failing because
|
In summary: we only guarantee stability on how you integrate / use the tool, but builds may start failing because
|
||||||
we fixed FNs, or introduced a new rule (ie: for people referencing whole categories).
|
|
||||||
We stick to our current approach when moving / renaming rules of deprecating them, and referencing
|
We stick to our current approach when moving / renaming rules of deprecating them, and referencing
|
||||||
the new one until the next major.
|
the new one until the next major.
|
||||||
|
|
||||||
@ -41,8 +42,9 @@ a patch release.
|
|||||||
|
|
||||||
See also
|
See also
|
||||||
|
|
||||||
* [ADR 3 - API evolution principles](pmd_projectdocs_decisions_adr_3.html)
|
Added line: 2286
|
||||||
* [Rule deprecation policy](pmd_devdocs_rule_deprecation_policy.html)
|
* [Rule deprecation policy](pmd_devdocs_rule_deprecation_policy.html)
|
||||||
|
Added line: 5476
|
||||||
Added line: 362
|
Added line: 362
|
||||||
|
|
||||||
## Git branches/tags policy
|
## Git branches/tags policy
|
||||||
|
@ -4,7 +4,6 @@ tags: [devdocs]
|
|||||||
permalink: pmd_devdocs_building.html
|
permalink: pmd_devdocs_building.html
|
||||||
author: Tom Copeland, Xavier Le Vourch <xlv@users.sourceforge.net>
|
author: Tom Copeland, Xavier Le Vourch <xlv@users.sourceforge.net>
|
||||||
---
|
---
|
||||||
|
|
||||||
<!-- Gives visibility -->
|
<!-- Gives visibility -->
|
||||||
{%include note.html content="TODO add IDE specific indications" %}
|
{%include note.html content="TODO add IDE specific indications" %}
|
||||||
|
|
||||||
@ -20,14 +19,15 @@ You’ll need to either check out the source code or download the latest source
|
|||||||
```
|
```
|
||||||
[tom@hal building]$ ls -l
|
[tom@hal building]$ ls -l
|
||||||
total 5716
|
total 5716
|
||||||
|
Added line: 9620
|
||||||
-rw-rw-r-- 1 tom tom 5837216 Jul 17 13:09 pmd-src-{{site.pmd.version}}.zip
|
-rw-rw-r-- 1 tom tom 5837216 Jul 17 13:09 pmd-src-{{site.pmd.version}}.zip
|
||||||
[tom@hal building]$ unzip -q pmd-src-{{site.pmd.version}}.zip
|
[tom@hal building]$ unzip -q pmd-src-{{site.pmd.version}}.zip
|
||||||
[tom@hal building]$
|
[tom@hal building]$
|
||||||
```
|
```
|
||||||
|
|
||||||
Now cd down into the `pmd` directory:
|
Now cd down into the `pmd` directory:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
Added line: 929
|
||||||
[tom@hal building]$ cd pmd-src-{{site.pmd.version}}
|
[tom@hal building]$ cd pmd-src-{{site.pmd.version}}
|
||||||
[tom@hal pmd-src-{{site.pmd.version}}]$ ls -l | grep pom.xml
|
[tom@hal pmd-src-{{site.pmd.version}}]$ ls -l | grep pom.xml
|
||||||
-rw-rw-r-- 1 tom tom 36482 14\. Nov 17:36 pom.xml
|
-rw-rw-r-- 1 tom tom 36482 14\. Nov 17:36 pom.xml
|
||||||
@ -38,18 +38,19 @@ That’s the project configuration for maven… let’s compile!
|
|||||||
|
|
||||||
```
|
```
|
||||||
[tom@hal pmd-src-{{site.pmd.version}}]$ ./mvnw clean verify
|
[tom@hal pmd-src-{{site.pmd.version}}]$ ./mvnw clean verify
|
||||||
|
Added line: 1728
|
||||||
[INFO] Scanning for projects...
|
[INFO] Scanning for projects...
|
||||||
[INFO] ------------------------------------------------------------------------
|
[INFO] ------------------------------------------------------------------------
|
||||||
[INFO] Reactor Build Order:
|
[INFO] Reactor Build Order:
|
||||||
[INFO]
|
[INFO]
|
||||||
[INFO] PMD
|
[INFO] PMD
|
||||||
|
Added line: 8063
|
||||||
[INFO] PMD Core
|
[INFO] PMD Core
|
||||||
...
|
...
|
||||||
... after a few minutes ...
|
... after a few minutes ...
|
||||||
[INFO] ------------------------------------------------------------------------
|
[INFO] ------------------------------------------------------------------------
|
||||||
[INFO] Reactor Summary:
|
[INFO] Reactor Summary:
|
||||||
[INFO]
|
[INFO]
|
||||||
[INFO] PMD ................................................ SUCCESS [ 3.061 s]
|
|
||||||
[INFO] PMD Core ........................................... SUCCESS [ 25.675 s]
|
[INFO] PMD Core ........................................... SUCCESS [ 25.675 s]
|
||||||
[INFO] PMD Test Framework ................................. SUCCESS [ 0.457 s]
|
[INFO] PMD Test Framework ................................. SUCCESS [ 0.457 s]
|
||||||
[INFO] PMD C++ ............................................ SUCCESS [ 1.893 s]
|
[INFO] PMD C++ ............................................ SUCCESS [ 1.893 s]
|
||||||
@ -73,6 +74,7 @@ That’s the project configuration for maven… let’s compile!
|
|||||||
[INFO] ------------------------------------------------------------------------
|
[INFO] ------------------------------------------------------------------------
|
||||||
[INFO] BUILD SUCCESS
|
[INFO] BUILD SUCCESS
|
||||||
[INFO] ------------------------------------------------------------------------
|
[INFO] ------------------------------------------------------------------------
|
||||||
|
Added line: 4774
|
||||||
[INFO] Total time: 02:36 min
|
[INFO] Total time: 02:36 min
|
||||||
[INFO] Finished at: 2015-11-14T17:46:06+01:00
|
[INFO] Finished at: 2015-11-14T17:46:06+01:00
|
||||||
[INFO] Final Memory: 63M/765M
|
[INFO] Final Memory: 63M/765M
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
|
Added line: 5858
|
||||||
title: Developer Resources
|
title: Developer Resources
|
||||||
tags: [devdocs]
|
tags: [devdocs]
|
||||||
permalink: pmd_devdocs_development.html
|
|
||||||
last_updated: March 2024
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Source Code
|
## Source Code
|
||||||
@ -14,17 +13,19 @@ The complete source code can be found on Github:
|
|||||||
* [github.com/pmd/build-tools](https://github.com/pmd/build-tools) - Contains the checkstyle rules we use
|
* [github.com/pmd/build-tools](https://github.com/pmd/build-tools) - Contains the checkstyle rules we use
|
||||||
* [github.com/pmd/pmd-eclipse-plugin](https://github.com/pmd/pmd-eclipse-plugin) - The PMD eclipse plugin
|
* [github.com/pmd/pmd-eclipse-plugin](https://github.com/pmd/pmd-eclipse-plugin) - The PMD eclipse plugin
|
||||||
* [github.com/pmd](https://github.com/pmd) - PMD Organization at github. There are a couple of more repositories
|
* [github.com/pmd](https://github.com/pmd) - PMD Organization at github. There are a couple of more repositories
|
||||||
|
Added line: 2734
|
||||||
|
|
||||||
## Continuous Integration
|
## Continuous Integration
|
||||||
|
|
||||||
We use [GitHub Actions](https://github.com/pmd/pmd/actions) as our ci service. The main repo and the eclipse plugin are built for
|
We use [GitHub Actions](https://github.com/pmd/pmd/actions) as our ci service. The main repo and the eclipse plugin are built for
|
||||||
every push. Each pull request is built as well.
|
every push. Each pull request is built as well.
|
||||||
|
Added line: 4139
|
||||||
|
|
||||||
The maven snapshot artifacts are deployed at [Sonatypes OSS snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/net/sourceforge/pmd/pmd/).
|
The maven snapshot artifacts are deployed at [Sonatypes OSS snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/net/sourceforge/pmd/pmd/).
|
||||||
|
|
||||||
Ready-to-use binary packages are uploaded to sourceforge at <https://sourceforge.net/projects/pmd/files/pmd/>.
|
Ready-to-use binary packages are uploaded to sourceforge at <https://sourceforge.net/projects/pmd/files/pmd/>.
|
||||||
|
Added line: 1607
|
||||||
|
|
||||||
## Documentation and Webpages
|
|
||||||
|
|
||||||
Main documentation server is [docs.pmd-code.org](https://docs.pmd-code.org).
|
Main documentation server is [docs.pmd-code.org](https://docs.pmd-code.org).
|
||||||
|
|
||||||
@ -38,3 +39,4 @@ First off, thanks for taking the time to contribute!
|
|||||||
|
|
||||||
Please have a look at [CONTRIBUTING.md](https://github.com/pmd/pmd/blob/main/CONTRIBUTING.md) and
|
Please have a look at [CONTRIBUTING.md](https://github.com/pmd/pmd/blob/main/CONTRIBUTING.md) and
|
||||||
[BUILDING.md](https://github.com/pmd/pmd/blob/main/BUILDING.md).
|
[BUILDING.md](https://github.com/pmd/pmd/blob/main/BUILDING.md).
|
||||||
|
Added line: 1439
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
---
|
---
|
||||||
title: How PMD Works
|
title: How PMD Works
|
||||||
|
Added line: 3106
|
||||||
|
Added line: 2903
|
||||||
tags: [devdocs]
|
tags: [devdocs]
|
||||||
summary: Processing overview of the different steps taken by PMD.
|
summary: Processing overview of the different steps taken by PMD.
|
||||||
last_updated: September 2017
|
last_updated: September 2017
|
||||||
permalink: pmd_devdocs_how_pmd_works.html
|
|
||||||
author: Tom Copeland, Andreas Dangel <andreas.dangel@adangel.org>
|
author: Tom Copeland, Andreas Dangel <andreas.dangel@adangel.org>
|
||||||
---
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The processing starts with the main class {% jdoc core::PmdAnalysis %}.
|
The processing starts with the main class {% jdoc core::PmdAnalysis %}.
|
||||||
|
|
||||||
* Parse command line parameters (see net.sourceforge.pmd.cli.PMDParameters)
|
|
||||||
Also load the incremental analysis cache file
|
Also load the incremental analysis cache file
|
||||||
* Load rulesets/rules
|
* Load rulesets/rules
|
||||||
* Determine languages (rules of different languages might be mixed in rulesets)
|
* Determine languages (rules of different languages might be mixed in rulesets)
|
||||||
@ -28,6 +27,7 @@ The processing starts with the main class {% jdoc core::PmdAnalysis %}.
|
|||||||
2. Check whether the file is already analyzed and a result is available from the analysis cache
|
2. Check whether the file is already analyzed and a result is available from the analysis cache
|
||||||
3. Parse the source code. Result is the root AST node.
|
3. Parse the source code. Result is the root AST node.
|
||||||
4. Always run the SymbolFacade visitor. It builds scopes, finds declarations and usages.
|
4. Always run the SymbolFacade visitor. It builds scopes, finds declarations and usages.
|
||||||
|
Added line: 2962
|
||||||
5. Run DFA (data flow analysis) visitor (if at least one rule requires it) for building
|
5. Run DFA (data flow analysis) visitor (if at least one rule requires it) for building
|
||||||
control flow graphs and data flow nodes.
|
control flow graphs and data flow nodes.
|
||||||
6. Run TypeResolution visitor (if at least one rule requires it)
|
6. Run TypeResolution visitor (if at least one rule requires it)
|
||||||
@ -38,5 +38,7 @@ The processing starts with the main class {% jdoc core::PmdAnalysis %}.
|
|||||||
type resolution information and DFA nodes.
|
type resolution information and DFA nodes.
|
||||||
* The rules will report found problems as RuleViolations.
|
* The rules will report found problems as RuleViolations.
|
||||||
* Render the found violations into the wanted format (XML, text, HTML, ...)
|
* Render the found violations into the wanted format (XML, text, HTML, ...)
|
||||||
|
Added line: 9697
|
||||||
|
Added line: 7329
|
||||||
* Store the incremental analysis cache
|
* Store the incremental analysis cache
|
||||||
* Depending on the number of violations found, exit with code 0 or 4.
|
* Depending on the number of violations found, exit with code 0 or 4.
|
||||||
|
@ -6,7 +6,6 @@ author: Andreas Dangel <andreas.dangel@pmd-code.org>
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Logging API is slf4j
|
## Logging API is slf4j
|
||||||
|
|
||||||
PMD uses [slf4j](https://www.slf4j.org/) as the logging API internally. Logging can be done also in
|
PMD uses [slf4j](https://www.slf4j.org/) as the logging API internally. Logging can be done also in
|
||||||
(Java-based) rules.
|
(Java-based) rules.
|
||||||
|
|
||||||
@ -30,18 +29,19 @@ E.g. you can add (if it is missing) the following dependency:
|
|||||||
```
|
```
|
||||||
|
|
||||||
To configure the logging, create the file `src/test/resources/simplelogger.properties`:
|
To configure the logging, create the file `src/test/resources/simplelogger.properties`:
|
||||||
|
|
||||||
```
|
```
|
||||||
org.slf4j.simpleLogger.logFile=System.err
|
org.slf4j.simpleLogger.logFile=System.err
|
||||||
org.slf4j.simpleLogger.showDateTime=false
|
org.slf4j.simpleLogger.showDateTime=false
|
||||||
org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd'T'HH:mm:ss.SSSXXX
|
org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd'T'HH:mm:ss.SSSXXX
|
||||||
|
Added line: 7336
|
||||||
org.slf4j.simpleLogger.showThreadName=true
|
org.slf4j.simpleLogger.showThreadName=true
|
||||||
org.slf4j.simpleLogger.showThreadId=false
|
|
||||||
org.slf4j.simpleLogger.showLogName=true
|
org.slf4j.simpleLogger.showLogName=true
|
||||||
org.slf4j.simpleLogger.showShortLogName=false
|
org.slf4j.simpleLogger.showShortLogName=false
|
||||||
|
Added line: 6352
|
||||||
org.slf4j.simpleLogger.levelInBrackets=false
|
org.slf4j.simpleLogger.levelInBrackets=false
|
||||||
|
|
||||||
# Default log level for all loggers
|
# Default log level for all loggers
|
||||||
|
Added line: 4673
|
||||||
# Must be one of "trace", "debug", "info", "warn", "error" or "off"
|
# Must be one of "trace", "debug", "info", "warn", "error" or "off"
|
||||||
# Will be changed by "--debug" command line option
|
# Will be changed by "--debug" command line option
|
||||||
org.slf4j.simpleLogger.defaultLogLevel=info
|
org.slf4j.simpleLogger.defaultLogLevel=info
|
||||||
@ -58,6 +58,8 @@ Disabling the logging in this property file will the make the tests fail of cour
|
|||||||
## Binary distribution
|
## Binary distribution
|
||||||
|
|
||||||
The binary distribution ships with also with `slf4j-simple` as the logger implementation.
|
The binary distribution ships with also with `slf4j-simple` as the logger implementation.
|
||||||
|
Added line: 4302
|
||||||
The default configuration is provided in `pmd-dist/src/main/resources/config/simplelogger.properties`.
|
The default configuration is provided in `pmd-dist/src/main/resources/config/simplelogger.properties`.
|
||||||
|
Added line: 6980
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,6 +89,7 @@ definitely don't come for free. It is much effort and requires perseverance to i
|
|||||||
* metrics (see below "Optional features")
|
* metrics (see below "Optional features")
|
||||||
* custom XPath functions
|
* custom XPath functions
|
||||||
* See `VmHandler` class as an example
|
* See `VmHandler` class as an example
|
||||||
|
Added line: 3738
|
||||||
|
|
||||||
### 7. Create a base visitor
|
### 7. Create a base visitor
|
||||||
* A parser visitor adapter is not needed anymore with PMD 7. The visitor interface now provides a default
|
* A parser visitor adapter is not needed anymore with PMD 7. The visitor interface now provides a default
|
||||||
@ -111,6 +112,7 @@ definitely don't come for free. It is much effort and requires perseverance to i
|
|||||||
### 9. Add AST regression tests
|
### 9. Add AST regression tests
|
||||||
|
|
||||||
For languages, that use an external library for parsing, the AST can easily change when upgrading the library.
|
For languages, that use an external library for parsing, the AST can easily change when upgrading the library.
|
||||||
|
Added line: 4630
|
||||||
Also for languages, where we have the grammar under our control, it is useful to have such tests.
|
Also for languages, where we have the grammar under our control, it is useful to have such tests.
|
||||||
|
|
||||||
The tests parse one or more source files and generate a textual representation of the AST. This text is compared
|
The tests parse one or more source files and generate a textual representation of the AST. This text is compared
|
||||||
@ -156,7 +158,6 @@ The Scala module also has a test, written in Kotlin instead of Java:
|
|||||||
|
|
||||||
|
|
||||||
### 10. Create an abstract rule class for the language
|
### 10. Create an abstract rule class for the language
|
||||||
* Extend `AbstractRule` and implement the parser visitor interface for your language *(see AbstractVmRule for example)*
|
|
||||||
* All other rules for your language should extend this class. The purpose of this class is to implement visit
|
* All other rules for your language should extend this class. The purpose of this class is to implement visit
|
||||||
methods for all AST types to simply delegate to default behavior. This is useful because most rules care only
|
methods for all AST types to simply delegate to default behavior. This is useful because most rules care only
|
||||||
about specific AST nodes, but PMD needs to know what to do with each node - so this just lets you use default
|
about specific AST nodes, but PMD needs to know what to do with each node - so this just lets you use default
|
||||||
@ -165,6 +166,7 @@ The Scala module also has a test, written in Kotlin instead of Java:
|
|||||||
### 11. Create rules
|
### 11. Create rules
|
||||||
* Rules are created by extending the abstract rule class created in step 9 *(see `EmptyForeachStmtRule` for example)*
|
* Rules are created by extending the abstract rule class created in step 9 *(see `EmptyForeachStmtRule` for example)*
|
||||||
* Creating rules is already pretty well documented in PMD - and it’s no different for a new language,
|
* Creating rules is already pretty well documented in PMD - and it’s no different for a new language,
|
||||||
|
Added line: 8843
|
||||||
except you may have different AST nodes.
|
except you may have different AST nodes.
|
||||||
|
|
||||||
### 12. Test the rules
|
### 12. Test the rules
|
||||||
@ -255,6 +257,7 @@ This can be achieved with Rule Designer:
|
|||||||
* Now build your implementation and place the `target/pmd-designer-<version>-SNAPSHOT.jar` to the `lib` directory inside your `pmd-bin-...` distribution (you have to delete old `pmd-designer-*.jar` from there).
|
* Now build your implementation and place the `target/pmd-designer-<version>-SNAPSHOT.jar` to the `lib` directory inside your `pmd-bin-...` distribution (you have to delete old `pmd-designer-*.jar` from there).
|
||||||
|
|
||||||
## Optional features
|
## Optional features
|
||||||
|
Added line: 7969
|
||||||
|
|
||||||
### Metrics
|
### Metrics
|
||||||
|
|
||||||
@ -267,7 +270,6 @@ If you want to add support for computing metrics:
|
|||||||
See {% jdoc java::lang.java.metrics.JavaMetrics %} for an example.
|
See {% jdoc java::lang.java.metrics.JavaMetrics %} for an example.
|
||||||
|
|
||||||
### Symbol table
|
### Symbol table
|
||||||
|
|
||||||
A symbol table keeps track of variables and their usages. It is part of semantic analysis and would
|
A symbol table keeps track of variables and their usages. It is part of semantic analysis and would
|
||||||
be executed in your parser adapter as an additional pass after you got the initial AST.
|
be executed in your parser adapter as an additional pass after you got the initial AST.
|
||||||
|
|
||||||
@ -286,7 +288,6 @@ see {% jdoc_package core::lang.symboltable %}. This will be deprecated and shoul
|
|||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
{% include note.html content=deprecated_symbols_api_note %}
|
{% include note.html content=deprecated_symbols_api_note %}
|
||||||
|
|
||||||
### Type resolution
|
|
||||||
|
|
||||||
For typed languages like Java type information can be useful for writing rules, that trigger only on
|
For typed languages like Java type information can be useful for writing rules, that trigger only on
|
||||||
specific types. Resolving types of expressions and variables would be done after in your parser
|
specific types. Resolving types of expressions and variables would be done after in your parser
|
||||||
@ -297,6 +298,7 @@ Type resolution tries to find the actual class type of each used type, following
|
|||||||
This might require additional configuration for the language, e.g. in Java you need
|
This might require additional configuration for the language, e.g. in Java you need
|
||||||
to configure an auxiliary classpath.
|
to configure an auxiliary classpath.
|
||||||
|
|
||||||
|
Added line: 4537
|
||||||
There is no general language independent API in PMD core. For now, each language will need to implement
|
There is no general language independent API in PMD core. For now, each language will need to implement
|
||||||
its own solution. The type information can be made available on the AST nodes via extra methods,
|
its own solution. The type information can be made available on the AST nodes via extra methods,
|
||||||
e.g. `getType()`.
|
e.g. `getType()`.
|
||||||
|
@ -16,9 +16,11 @@ Regression difference reports are commented back to the PR for the reviewer's in
|
|||||||
`gem install pmdtester --pre`
|
`gem install pmdtester --pre`
|
||||||
|
|
||||||
**Verifying your local changes and generate a diff-report locally**
|
**Verifying your local changes and generate a diff-report locally**
|
||||||
|
Added line: 7250
|
||||||
|
Added line: 7703
|
||||||
`pmdtester -r YOUR_LOCAL_PMD_GIT_REPO_ROOT_DIR -b main -p YOUR_DEVELOPMENT_BRANCH`
|
`pmdtester -r YOUR_LOCAL_PMD_GIT_REPO_ROOT_DIR -b main -p YOUR_DEVELOPMENT_BRANCH`
|
||||||
|
Added line: 9452
|
||||||
|
|
||||||
The regression difference report is placed in the `YOUR_WORKING_DIR/target/reports/diff` directory.
|
|
||||||
|
|
||||||
|
Added line: 2371
|
||||||
For more documentation on pmdtester, see [README.rdoc](https://github.com/pmd/pmd-regression-tester/blob/main/README.rdoc)
|
For more documentation on pmdtester, see [README.rdoc](https://github.com/pmd/pmd-regression-tester/blob/main/README.rdoc)
|
||||||
|
@ -38,8 +38,7 @@ This roadmap contains all the different 'workshops' PMD's developers are working
|
|||||||
Added line: 3155
|
Added line: 3155
|
||||||
|
|
||||||
## Better symbol analysis
|
## Better symbol analysis
|
||||||
|
Added line: 2948
|
||||||
Currently PMD only looks at one source file at a time. Instead, it should resolve symbols across classes.
|
|
||||||
This will eliminate some open bugs and enable a lot more rules to be written. However, it'll taken some doing,
|
This will eliminate some open bugs and enable a lot more rules to be written. However, it'll taken some doing,
|
||||||
because it'll require parsing of class files. Lots of work here.
|
because it'll require parsing of class files. Lots of work here.
|
||||||
Added line: 8681
|
Added line: 8681
|
||||||
@ -55,7 +54,6 @@ that use it. We should be able to use it to simplify some current rules, as wel
|
|||||||
**These are things which really should be done, but just haven't been gotten to yet:**
|
**These are things which really should be done, but just haven't been gotten to yet:**
|
||||||
|
|
||||||
* Enhance Rule Designer to allow testing of the violation suppress Regex and XPath.
|
* Enhance Rule Designer to allow testing of the violation suppress Regex and XPath.
|
||||||
* Remove the type resolution specific rules. Merge these back into the
|
|
||||||
standard rules. In general, a Rule should use TR when it can, and fall
|
standard rules. In general, a Rule should use TR when it can, and fall
|
||||||
back on non-TR approach otherwise. No need for separate Rules for TR/non-TR.
|
back on non-TR approach otherwise. No need for separate Rules for TR/non-TR.
|
||||||
* Reconcile the util.designer and util.viewer packages. Two versions of the
|
* Reconcile the util.designer and util.viewer packages. Two versions of the
|
||||||
@ -68,6 +66,7 @@ Added line: 3254
|
|||||||
assignments? (e.g. int a, b; int a = b = x;)
|
assignments? (e.g. int a, b; int a = b = x;)
|
||||||
|
|
||||||
<strong>These are food for thought, perhaps future items. If you think you'd like to
|
<strong>These are food for thought, perhaps future items. If you think you'd like to
|
||||||
|
Added line: 5133
|
||||||
work on one of these, check with pmd-devel to see what the current thoughts
|
work on one of these, check with pmd-devel to see what the current thoughts
|
||||||
on the topic.</strong>
|
on the topic.</strong>
|
||||||
|
|
||||||
@ -84,6 +83,7 @@ Added line: 7369
|
|||||||
.jsp for JSP extensions, some use .jspx, .xhtml, etc.). Also, consider
|
.jsp for JSP extensions, some use .jspx, .xhtml, etc.). Also, consider
|
||||||
hooks into the LanguageVersionDiscoverer process for classifying a
|
hooks into the LanguageVersionDiscoverer process for classifying a
|
||||||
File/String to a LanguageVersion of a specific Language, one could imaging
|
File/String to a LanguageVersion of a specific Language, one could imaging
|
||||||
|
Added line: 8029
|
||||||
using a 'magic' system like Unix uses to tell different versions of files
|
using a 'magic' system like Unix uses to tell different versions of files
|
||||||
apart based on actual content.
|
apart based on actual content.
|
||||||
|
|
||||||
@ -91,6 +91,7 @@ Added line: 7369
|
|||||||
and then declare the language specific node interfaces to be something like
|
and then declare the language specific node interfaces to be something like
|
||||||
'JavaNode extends Node<JavaNode>'? This could allow anything on the Node
|
'JavaNode extends Node<JavaNode>'? This could allow anything on the Node
|
||||||
interface to return the language specific node type instead of generic
|
interface to return the language specific node type instead of generic
|
||||||
|
Added line: 3084
|
||||||
node. For example, ASTStatement.jjtGetParent() to return a JavaNode,
|
node. For example, ASTStatement.jjtGetParent() to return a JavaNode,
|
||||||
instead of a Node. This is a rather huge change, as the Node interface is
|
instead of a Node. This is a rather huge change, as the Node interface is
|
||||||
one of the pervasive things in the PMD code base. Is the extra work of using
|
one of the pervasive things in the PMD code base. Is the extra work of using
|
||||||
@ -120,6 +121,7 @@ Some of the code is a bit sloppy:
|
|||||||
* RuleSetFactory is a mess. It needs to be refactored into something that has layers, or decorators, or something.
|
* RuleSetFactory is a mess. It needs to be refactored into something that has layers, or decorators, or something.
|
||||||
* Cleanups would be welcome for ConstructorCallsOverridableMethod and DoubleCheckedLocking
|
* Cleanups would be welcome for ConstructorCallsOverridableMethod and DoubleCheckedLocking
|
||||||
* The Designer GUI is a bit messed up; the bottom panes look funny.
|
* The Designer GUI is a bit messed up; the bottom panes look funny.
|
||||||
|
Added line: 6534
|
||||||
* The grammar has some odd bits:
|
* The grammar has some odd bits:
|
||||||
* BlockStatement has an odd hack for class definitions inside methods
|
* BlockStatement has an odd hack for class definitions inside methods
|
||||||
* enumLookahead() seems like a bit of overkill, can it use Modifiers somehow?
|
* enumLookahead() seems like a bit of overkill, can it use Modifiers somehow?
|
||||||
|
@ -2,9 +2,11 @@
|
|||||||
title: Rule deprecation policy
|
title: Rule deprecation policy
|
||||||
tags: [devdocs]
|
tags: [devdocs]
|
||||||
summary: Describes when and how rules are deprecated
|
summary: Describes when and how rules are deprecated
|
||||||
|
Added line: 3308
|
||||||
last_updated: November 15, 2019
|
last_updated: November 15, 2019
|
||||||
permalink: pmd_devdocs_rule_deprecation_policy.html
|
permalink: pmd_devdocs_rule_deprecation_policy.html
|
||||||
author: Andreas Dangel
|
author: Andreas Dangel
|
||||||
|
Added line: 4976
|
||||||
---
|
---
|
||||||
|
|
||||||
When improving PMD over time, some rules might become obsolete. This could be because the underlying
|
When improving PMD over time, some rules might become obsolete. This could be because the underlying
|
||||||
@ -13,10 +15,11 @@ has been replaced by a better implementation.
|
|||||||
|
|
||||||
In order to remove the requirement to maintain such rules forever, these rules can be marked as **deprecated**.
|
In order to remove the requirement to maintain such rules forever, these rules can be marked as **deprecated**.
|
||||||
This means, that such rules can entirely be removed in the future.
|
This means, that such rules can entirely be removed in the future.
|
||||||
However, the rules must not be removed immediately, since that would break any (custom) ruleset, that
|
|
||||||
references this rule.
|
references this rule.
|
||||||
|
Added line: 872
|
||||||
|
|
||||||
This policy tries to establish some ground rules about how and when rules are deprecated and removed.
|
This policy tries to establish some ground rules about how and when rules are deprecated and removed.
|
||||||
|
Added line: 3079
|
||||||
The main goal is, to maintain compatibility of custom rulesets throughout the deprecation process.
|
The main goal is, to maintain compatibility of custom rulesets throughout the deprecation process.
|
||||||
|
|
||||||
|
|
||||||
@ -57,7 +60,6 @@ Before a rule can be removed, it must have been marked as deprecated:
|
|||||||
</rule>
|
</rule>
|
||||||
```
|
```
|
||||||
|
|
||||||
This has the effect, that it is **automatically disabled** if the complete ruleset or category
|
|
||||||
is referenced. The rule can still be used, if it is referenced directly.
|
is referenced. The rule can still be used, if it is referenced directly.
|
||||||
|
|
||||||
The reasons for the deprecation should be explained in the rule description. If there is a replacement rule
|
The reasons for the deprecation should be explained in the rule description. If there is a replacement rule
|
||||||
@ -74,6 +76,7 @@ Removing a rule from a ruleset or category will break any custom ruleset, that r
|
|||||||
this rule directly. Therefore rules can only be removed with the next major release of PMD.
|
this rule directly. Therefore rules can only be removed with the next major release of PMD.
|
||||||
|
|
||||||
## Rule property compatibility
|
## Rule property compatibility
|
||||||
|
Added line: 3232
|
||||||
|
|
||||||
Renaming or removing rule properties is not backwards compatible and can only be done
|
Renaming or removing rule properties is not backwards compatible and can only be done
|
||||||
with a major release of PMD.
|
with a major release of PMD.
|
||||||
@ -95,7 +98,6 @@ Therefore, the process for **renaming a property** looks like this:
|
|||||||
preference, but the deprecation warning for the old property should still be issued.
|
preference, but the deprecation warning for the old property should still be issued.
|
||||||
* The deprecated property can be removed with the next major release of PMD.
|
* The deprecated property can be removed with the next major release of PMD.
|
||||||
|
|
||||||
|
|
||||||
**Changing the default value** of a property might have some results, that make the rule
|
**Changing the default value** of a property might have some results, that make the rule
|
||||||
behavioral incompatible: E.g. it could find many more violations with a different default
|
behavioral incompatible: E.g. it could find many more violations with a different default
|
||||||
configuration and therefore lead to a sudden increase of violations after a PMD upgrade.
|
configuration and therefore lead to a sudden increase of violations after a PMD upgrade.
|
||||||
|
@ -25,9 +25,9 @@ pages are generated that way.
|
|||||||
|
|
||||||
### Handwritten documentation
|
### Handwritten documentation
|
||||||
|
|
||||||
|
Added line: 5200
|
||||||
All handwritten documentation is stored in the subfolders under `docs/pages`. The folder structure resembles the sidebar structure.
|
All handwritten documentation is stored in the subfolders under `docs/pages`. The folder structure resembles the sidebar structure.
|
||||||
Since all pages use a simple *permalink*, in the rendered html pages, all pages are flattened in one directory.
|
Since all pages use a simple *permalink*, in the rendered html pages, all pages are flattened in one directory.
|
||||||
This makes it easy to view the documentation also offline.
|
|
||||||
|
|
||||||
### Rule documentation
|
### Rule documentation
|
||||||
|
|
||||||
@ -73,9 +73,10 @@ Here's a short overview:
|
|||||||
| `{% raw %}{% jdoc !q!core::lang.rule.Rule %}{% endraw %}` | {% jdoc !q!core::lang.rule.Rule %} |
|
| `{% raw %}{% jdoc !q!core::lang.rule.Rule %}{% endraw %}` | {% jdoc !q!core::lang.rule.Rule %} |
|
||||||
| `{% raw %}{% jdoc core::lang.rule.Rule#setName(java.lang.String) %}{% endraw %}` | {% jdoc core::lang.rule.Rule#setName(java.lang.String) %} |
|
| `{% raw %}{% jdoc core::lang.rule.Rule#setName(java.lang.String) %}{% endraw %}` | {% jdoc core::lang.rule.Rule#setName(java.lang.String) %} |
|
||||||
| `{% raw %}{% jdoc !c!core::lang.rule.Rule#setName(java.lang.String) %}{% endraw %}` | {% jdoc !c!core::lang.rule.Rule#setName(java.lang.String) %} |
|
| `{% raw %}{% jdoc !c!core::lang.rule.Rule#setName(java.lang.String) %}{% endraw %}` | {% jdoc !c!core::lang.rule.Rule#setName(java.lang.String) %} |
|
||||||
| `{% raw %}{% jdoc !a!core::lang.rule.Rule#setName(java.lang.String) %}{% endraw %}` | {% jdoc !a!core::lang.rule.Rule#setName(java.lang.String) %} |
|
Added line: 2337
|
||||||
| `{% raw %}{% jdoc !ac!core::lang.rule.Rule#setName(java.lang.String) %}{% endraw %}` | {% jdoc !ac!core::lang.rule.Rule#setName(java.lang.String) %} |
|
| `{% raw %}{% jdoc !ac!core::lang.rule.Rule#setName(java.lang.String) %}{% endraw %}` | {% jdoc !ac!core::lang.rule.Rule#setName(java.lang.String) %} |
|
||||||
| `{% raw %}{% jdoc core::properties.PropertyDescriptor %}{% endraw %}` | {% jdoc core::properties.PropertyDescriptor %} |
|
| `{% raw %}{% jdoc core::properties.PropertyDescriptor %}{% endraw %}` | {% jdoc core::properties.PropertyDescriptor %} |
|
||||||
|
Added line: 5467
|
||||||
| `{% raw %}{% jdoc_nspace :jast java::lang.java.ast %}{% jdoc jast::ASTTypeDeclaration %}{% endraw %}` | {% jdoc_nspace :jast java::lang.java.ast %}{% jdoc jast::ASTTypeDeclaration %} |
|
| `{% raw %}{% jdoc_nspace :jast java::lang.java.ast %}{% jdoc jast::ASTTypeDeclaration %}{% endraw %}` | {% jdoc_nspace :jast java::lang.java.ast %}{% jdoc jast::ASTTypeDeclaration %} |
|
||||||
| `{% raw %}{% jdoc_nspace :jast java::lang.java.ast %}{% jdoc_package :jast %}{% endraw %}` | {% jdoc_nspace :jast java::lang.java.ast %}{% jdoc_package :jast %} |
|
| `{% raw %}{% jdoc_nspace :jast java::lang.java.ast %}{% jdoc_package :jast %}{% endraw %}` | {% jdoc_nspace :jast java::lang.java.ast %}{% jdoc_package :jast %} |
|
||||||
| `{% raw %}{% jdoc_nspace :PrD core::properties.PropertyDescriptor %}{% jdoc !ac!:PrD#uiOrder() %}{% endraw %}` | {% jdoc_nspace :PrD core::properties.PropertyDescriptor %}{% jdoc !ac!:PrD#uiOrder() %} |
|
| `{% raw %}{% jdoc_nspace :PrD core::properties.PropertyDescriptor %}{% jdoc !ac!:PrD#uiOrder() %}{% endraw %}` | {% jdoc_nspace :PrD core::properties.PropertyDescriptor %}{% jdoc !ac!:PrD#uiOrder() %} |
|
||||||
@ -124,7 +125,6 @@ It starts the jekyll server in the background and doesn't block the current shel
|
|||||||
|
|
||||||
The sidebar is stored as a YAML document under `_data/sidebars/pmd_sidebar.yml`.
|
The sidebar is stored as a YAML document under `_data/sidebars/pmd_sidebar.yml`.
|
||||||
|
|
||||||
Make sure to add an entry there, whenever you create a new page.
|
|
||||||
|
|
||||||
|
|
||||||
## The frontmatter
|
## The frontmatter
|
||||||
@ -151,6 +151,7 @@ You can prevent this with "toc: false".
|
|||||||
You can add **keywords**, that will be used for the on-site search: "keywords: documentation, jekyll, markdown"
|
You can add **keywords**, that will be used for the on-site search: "keywords: documentation, jekyll, markdown"
|
||||||
|
|
||||||
It's useful to maintain a **last_update** field. This will be added at the bottom of the
|
It's useful to maintain a **last_update** field. This will be added at the bottom of the
|
||||||
|
Added line: 7775
|
||||||
page.
|
page.
|
||||||
|
|
||||||
A **summary** can also be provided. It will be added in a box before the content.
|
A **summary** can also be provided. It will be added in a box before the content.
|
||||||
@ -175,6 +176,7 @@ Other available types are:
|
|||||||
* note.html
|
* note.html
|
||||||
* tip.html
|
* tip.html
|
||||||
* warning.html
|
* warning.html
|
||||||
|
Added line: 3475
|
||||||
* important.html
|
* important.html
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,8 +16,10 @@ summary: "Apex-specific features and guidance"
|
|||||||
## Metrics framework
|
## Metrics framework
|
||||||
|
|
||||||
In order to use code metrics in Apex, use the metrics constants in {% jdoc apex::lang.apex.metrics.ApexMetrics %},
|
In order to use code metrics in Apex, use the metrics constants in {% jdoc apex::lang.apex.metrics.ApexMetrics %},
|
||||||
|
Added line: 9248
|
||||||
together with {% jdoc core::lang.metrics.MetricsUtil %}.
|
together with {% jdoc core::lang.metrics.MetricsUtil %}.
|
||||||
|
Added line: 1942
|
||||||
|
Added line: 8676
|
||||||
## Multifile Analysis
|
## Multifile Analysis
|
||||||
|
|
||||||
Integration happens in {% jdoc apex::lang.apex.multifile.ApexMultifileAnalysis %}. It uses
|
Integration happens in {% jdoc apex::lang.apex.multifile.ApexMultifileAnalysis %}. It uses
|
||||||
@ -31,10 +33,10 @@ Used for rule {% rule apex/design/UnusedMethod %}
|
|||||||
|
|
||||||
See [Apex language properties](pmd_languages_configuration.html#apex-language-properties)
|
See [Apex language properties](pmd_languages_configuration.html#apex-language-properties)
|
||||||
|
|
||||||
## Parser
|
|
||||||
|
|
||||||
Since PMD 7.0.0 we use the open source [apex-parser](https://github.com/apex-dev-tools/apex-parser),
|
Added line: 3741
|
||||||
together with [Summit AST](https://github.com/google/summit-ast) which translates the ANTLR parse tree
|
together with [Summit AST](https://github.com/google/summit-ast) which translates the ANTLR parse tree
|
||||||
|
Added line: 5250
|
||||||
into an AST.
|
into an AST.
|
||||||
|
|
||||||
When PMD added Apex support with version 5.5.0, it utilized the Apex Jorje library to parse Apex source
|
When PMD added Apex support with version 5.5.0, it utilized the Apex Jorje library to parse Apex source
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
---
|
---
|
||||||
|
Added line: 6511
|
||||||
title: C/C++ support
|
title: C/C++ support
|
||||||
permalink: pmd_languages_cpp.html
|
permalink: pmd_languages_cpp.html
|
||||||
last_updated: September 2023 (7.0.0)
|
|
||||||
tags: [languages, CpdCapableLanguage]
|
tags: [languages, CpdCapableLanguage]
|
||||||
summary: "C/C++ features and guidance"
|
summary: "C/C++ features and guidance"
|
||||||
---
|
---
|
||||||
|
|
||||||
{% include language_info.html name='C++' id='cpp' implementation='cpp::lang.cpp.CppLanguageModule' supports_cpd=true since='3.5' %}
|
{% include language_info.html name='C++' id='cpp' implementation='cpp::lang.cpp.CppLanguageModule' supports_cpd=true since='3.5' %}
|
||||||
|
Added line: 3813
|
||||||
|
|
||||||
## Language Properties
|
|
||||||
|
|
||||||
See [Cpp language properties](pmd_languages_configuration.html#cpp-language-properties)
|
See [Cpp language properties](pmd_languages_configuration.html#cpp-language-properties)
|
||||||
|
Added line: 5757
|
||||||
|
Added line: 7276
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
---
|
---
|
||||||
title: Fortran support
|
title: Fortran support
|
||||||
|
Added line: 5107
|
||||||
|
Added line: 289
|
||||||
permalink: pmd_languages_fortran.html
|
permalink: pmd_languages_fortran.html
|
||||||
last_updated: September 2023 (7.0.0)
|
Added line: 1775
|
||||||
tags: [languages, CpdCapableLanguage]
|
tags: [languages, CpdCapableLanguage]
|
||||||
summary: "Fortran features and guidance"
|
summary: "Fortran features and guidance"
|
||||||
---
|
---
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
---
|
---
|
||||||
title: Go support
|
Added line: 7885
|
||||||
permalink: pmd_languages_go.html
|
permalink: pmd_languages_go.html
|
||||||
last_updated: September 2023 (7.0.0)
|
last_updated: September 2023 (7.0.0)
|
||||||
tags: [languages, CpdCapableLanguage]
|
tags: [languages, CpdCapableLanguage]
|
||||||
summary: "Go features and guidance"
|
summary: "Go features and guidance"
|
||||||
|
Added line: 9164
|
||||||
---
|
---
|
||||||
|
|
||||||
> [Go](https://golang.org/) is a statically typed, compiled high-level programming language.
|
Added line: 3416
|
||||||
|
Added line: 9083
|
||||||
|
|
||||||
{% include language_info.html name='Go' id='go' implementation='go::lang.go.GoLanguageModule' supports_cpd=true since='5.2.0' %}
|
{% include language_info.html name='Go' id='go' implementation='go::lang.go.GoLanguageModule' supports_cpd=true since='5.2.0' %}
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
---
|
---
|
||||||
title: Overview
|
title: Overview
|
||||||
permalink: pmd_languages_index.html
|
|
||||||
Added line: 8808
|
Added line: 8808
|
||||||
|
Added line: 8461
|
||||||
|
Added line: 3534
|
||||||
last_updated: September 2023 (7.0.0)
|
last_updated: September 2023 (7.0.0)
|
||||||
Added line: 9182
|
Added line: 9182
|
||||||
tags: [languages]
|
tags: [languages]
|
||||||
|
Added line: 7287
|
||||||
|
Added line: 927
|
||||||
---
|
---
|
||||||
|
|
||||||
* [CpdCapableLanguages](tag_CpdCapableLanguage.html)
|
* [CpdCapableLanguages](tag_CpdCapableLanguage.html)
|
||||||
Added line: 301
|
Added line: 301
|
||||||
|
@ -16,6 +16,7 @@ Usually the latest non-preview Java Version is the default version.
|
|||||||
| Java Version | Alias | Supported by PMD since |
|
| Java Version | Alias | Supported by PMD since |
|
||||||
|--------------|-------|------------------------|
|
|--------------|-------|------------------------|
|
||||||
| 23-preview | | 7.5.0 |
|
| 23-preview | | 7.5.0 |
|
||||||
|
Added line: 2855
|
||||||
| 23 (default) | | 7.5.0 |
|
| 23 (default) | | 7.5.0 |
|
||||||
| 22-preview | | 7.0.0 |
|
| 22-preview | | 7.0.0 |
|
||||||
| 22 | | 7.0.0 |
|
| 22 | | 7.0.0 |
|
||||||
@ -48,6 +49,7 @@ it via the environment variable `PMD_JAVA_OPTS` and select the new language vers
|
|||||||
pmd check --use-version java-22-preview ...
|
pmd check --use-version java-22-preview ...
|
||||||
|
|
||||||
Note: we only support preview language features for the latest two java versions.
|
Note: we only support preview language features for the latest two java versions.
|
||||||
|
Added line: 7205
|
||||||
|
|
||||||
## Language Properties
|
## Language Properties
|
||||||
|
|
||||||
@ -94,7 +96,6 @@ Until Java 8, there exists the jar file `rt.jar` in `${JAVA_HOME}/jre/lib`. It i
|
|||||||
this jar file in the auxClasspath. Usually, you would add this as the first entry in the auxClasspath.
|
this jar file in the auxClasspath. Usually, you would add this as the first entry in the auxClasspath.
|
||||||
|
|
||||||
Beginning with Java 9, the Java platform has been modularized and [Modular Run-Time Images](https://openjdk.org/jeps/220)
|
Beginning with Java 9, the Java platform has been modularized and [Modular Run-Time Images](https://openjdk.org/jeps/220)
|
||||||
have been introduced. The file `${JAVA_HOME}/lib/modules` contains now all the classes, but it is not a jar file
|
|
||||||
anymore. However, each Java installation provides an implementation to read such Run-Time Images in
|
anymore. However, each Java installation provides an implementation to read such Run-Time Images in
|
||||||
`${JAVA_HOME}/lib/jrt-fs.jar`. This is an implementation of the `jrt://` filesystem and through this, the bytecode
|
`${JAVA_HOME}/lib/jrt-fs.jar`. This is an implementation of the `jrt://` filesystem and through this, the bytecode
|
||||||
of the Java runtime classes can be loaded. In order to use this with PMD, the file `${JAVA_HOME}/lib/jrt-fs.jar`
|
of the Java runtime classes can be loaded. In order to use this with PMD, the file `${JAVA_HOME}/lib/jrt-fs.jar`
|
||||||
@ -106,6 +107,7 @@ back to load the Java runtime classes **from the current runtime**, that is the
|
|||||||
execute PMD. This might not be the correct version, e.g. you might run PMD with Java 8, but analyze code
|
execute PMD. This might not be the correct version, e.g. you might run PMD with Java 8, but analyze code
|
||||||
written for Java 21. In that case, you have to provide "jrt-fs.jar" on the auxClasspath.
|
written for Java 21. In that case, you have to provide "jrt-fs.jar" on the auxClasspath.
|
||||||
|
|
||||||
|
Added line: 5968
|
||||||
Not providing the correct auxClasspath might result in false positives or negatives for some rules,
|
Not providing the correct auxClasspath might result in false positives or negatives for some rules,
|
||||||
such as {% rule java/bestpractices/MissingOverride %}.
|
such as {% rule java/bestpractices/MissingOverride %}.
|
||||||
This rule needs to figure out, whether a method is defined already in the super class or interface. E.g. the method
|
This rule needs to figure out, whether a method is defined already in the super class or interface. E.g. the method
|
||||||
@ -131,6 +133,7 @@ pmd check -d src/main/java \
|
|||||||
Symbol table API related classes are in the package {% jdoc_package :symbols %}.
|
Symbol table API related classes are in the package {% jdoc_package :symbols %}.
|
||||||
The root interface for symbols is {%jdoc symbols::JElementSymbol %}.
|
The root interface for symbols is {%jdoc symbols::JElementSymbol %}.
|
||||||
|
|
||||||
|
Added line: 6458
|
||||||
The symbol table can be requested on any node with the method {% jdoc ast::AbstractJavaNode#getSymbolTable() %}.
|
The symbol table can be requested on any node with the method {% jdoc ast::AbstractJavaNode#getSymbolTable() %}.
|
||||||
This returns a {% jdoc symbols::table.JSymbolTable %} which gives you access to variables, methods and types that are
|
This returns a {% jdoc symbols::table.JSymbolTable %} which gives you access to variables, methods and types that are
|
||||||
within scope.
|
within scope.
|
||||||
@ -141,7 +144,6 @@ with the method {% jdoc ast::ASTAssignableExpr.ASTNamedReferenceExpr#getReferenc
|
|||||||
|
|
||||||
Declaration nodes, such as {% jdoc ast::ASTVariableId %} implement the interface
|
Declaration nodes, such as {% jdoc ast::ASTVariableId %} implement the interface
|
||||||
{%jdoc ast::SymbolDeclaratorNode %}. Through the method
|
{%jdoc ast::SymbolDeclaratorNode %}. Through the method
|
||||||
{% jdoc ast::SymbolDeclaratorNode#getSymbol() %} you can also access the symbol.
|
|
||||||
|
|
||||||
To find usages, you can call {% jdoc ast::ASTVariableId#getLocalUsages() %}.
|
To find usages, you can call {% jdoc ast::ASTVariableId#getLocalUsages() %}.
|
||||||
|
|
||||||
@ -166,12 +168,12 @@ E.g. this can be called on {% jdoc ast::ASTMethodCall %} to retrieve the return
|
|||||||
|
|
||||||
In order to use code metrics in Java, use the metrics constants in {% jdoc java::lang.java.metrics.JavaMetrics %},
|
In order to use code metrics in Java, use the metrics constants in {% jdoc java::lang.java.metrics.JavaMetrics %},
|
||||||
together with {% jdoc core::lang.metrics.MetricsUtil %}. For instance:
|
together with {% jdoc core::lang.metrics.MetricsUtil %}. For instance:
|
||||||
|
Added line: 3747
|
||||||
|
|
||||||
```java
|
```java
|
||||||
@Override
|
@Override
|
||||||
public Object visit(ASTMethodDeclaration node, Object data) {
|
public Object visit(ASTMethodDeclaration node, Object data) {
|
||||||
if (JavaMetrics.NCSS.supports(node)) {
|
if (JavaMetrics.NCSS.supports(node)) {
|
||||||
int methodSize = MetricsUtil.computeMetric(JavaMetrics.NCSS, node, ncssOptions);
|
|
||||||
if (methodSize >= level) {
|
if (methodSize >= level) {
|
||||||
addViolation(data, node);
|
addViolation(data, node);
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
---
|
Added line: 4290
|
||||||
|
Added line: 6124
|
||||||
|
Added line: 4635
|
||||||
|
Added line: 5865
|
||||||
|
Added line: 2765
|
||||||
|
Added line: 7412
|
||||||
|
Added line: 851
|
||||||
title: Matlab support
|
title: Matlab support
|
||||||
permalink: pmd_languages_matlab.html
|
|
||||||
last_updated: September 2023 (7.0.0)
|
last_updated: September 2023 (7.0.0)
|
||||||
tags: [languages, CpdCapableLanguage]
|
tags: [languages, CpdCapableLanguage]
|
||||||
|
Added line: 901
|
||||||
summary: "Matlab-specific features and guidance"
|
summary: "Matlab-specific features and guidance"
|
||||||
---
|
---
|
||||||
|
|
||||||
[Matlab](https://www.mathworks.com/) scripts are supported for Copy-Paste-Detection only.
|
[Matlab](https://www.mathworks.com/) scripts are supported for Copy-Paste-Detection only.
|
||||||
|
|
||||||
{% include language_info.html name='Matlab' id='matlab' implementation='matlab::lang.matlab.MatlabLanguageModule' supports_cpd=true since='5.3.0' %}
|
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
|
Added line: 8296
|
||||||
title: Perl support
|
title: Perl support
|
||||||
permalink: pmd_languages_perl.html
|
permalink: pmd_languages_perl.html
|
||||||
|
Added line: 2963
|
||||||
Added line: 4019
|
Added line: 4019
|
||||||
|
Added line: 435
|
||||||
Added line: 567
|
Added line: 567
|
||||||
Added line: 6551
|
Added line: 6551
|
||||||
tags: [languages, CpdCapableLanguage]
|
tags: [languages, CpdCapableLanguage]
|
||||||
Added line: 3949
|
|
||||||
summary: "Perl-specific features and guidance"
|
summary: "Perl-specific features and guidance"
|
||||||
|
Added line: 5957
|
||||||
---
|
---
|
||||||
|
|
||||||
> [Perl](https://www.perl.org/) is a highly capable, feature-rich programming language with over 30 years of development.
|
|
||||||
|
|
||||||
{% include language_info.html name='Perl' id='perl' implementation='perl::lang.perl.PerlLanguageModule' supports_cpd=true since='5.5.0' %}
|
{% include language_info.html name='Perl' id='perl' implementation='perl::lang.perl.PerlLanguageModule' supports_cpd=true since='5.5.0' %}
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
---
|
---
|
||||||
title: PHP support
|
title: PHP support
|
||||||
|
Added line: 8544
|
||||||
permalink: pmd_languages_php.html
|
permalink: pmd_languages_php.html
|
||||||
|
Added line: 3970
|
||||||
last_updated: September 2023 (7.0.0)
|
last_updated: September 2023 (7.0.0)
|
||||||
tags: [languages, CpdCapableLanguage]
|
tags: [languages, CpdCapableLanguage]
|
||||||
summary: "PHP-specific features and guidance"
|
|
||||||
---
|
---
|
||||||
|
Added line: 9798
|
||||||
|
|
||||||
|
Added line: 4031
|
||||||
> [PHP](https://www.php.net/) is a popular general-purpose scripting language that is especially suited to web development.
|
> [PHP](https://www.php.net/) is a popular general-purpose scripting language that is especially suited to web development.
|
||||||
|
|
||||||
{% include language_info.html name='PHP' id='php' implementation='php::lang.php.PhpLanguageModule' supports_cpd=true since='1.1' %}
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Ruby support
|
title: Ruby support
|
||||||
permalink: pmd_languages_ruby.html
|
permalink: pmd_languages_ruby.html
|
||||||
|
Added line: 218
|
||||||
last_updated: September 2023 (7.0.0)
|
last_updated: September 2023 (7.0.0)
|
||||||
tags: [languages, CpdCapableLanguage]
|
tags: [languages, CpdCapableLanguage]
|
||||||
summary: "Ruby-specific features and guidance"
|
summary: "Ruby-specific features and guidance"
|
||||||
@ -8,5 +9,6 @@ summary: "Ruby-specific features and guidance"
|
|||||||
|
|
||||||
> [Ruby](https://www.ruby-lang.org/en/) is a dynamic, open source programming language with a focus on simplicity and
|
> [Ruby](https://www.ruby-lang.org/en/) is a dynamic, open source programming language with a focus on simplicity and
|
||||||
> productivity. It has an elegant syntax that is natural to read and easy to write.
|
> productivity. It has an elegant syntax that is natural to read and easy to write.
|
||||||
|
Added line: 5690
|
||||||
{% include language_info.html name='Ruby' id='ruby' implementation='ruby::lang.ruby.RubyLanguageModule' supports_cpd=true since='3.0' %}
|
{% include language_info.html name='Ruby' id='ruby' implementation='ruby::lang.ruby.RubyLanguageModule' supports_cpd=true since='3.0' %}
|
||||||
|
Added line: 9712
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
---
|
---
|
||||||
title: Scala support
|
title: Scala support
|
||||||
permalink: pmd_languages_scala.html
|
Added line: 3122
|
||||||
last_updated: September 2023 (7.0.0)
|
last_updated: September 2023 (7.0.0)
|
||||||
tags: [languages, PmdCapableLanguage, CpdCapableLanguage]
|
tags: [languages, PmdCapableLanguage, CpdCapableLanguage]
|
||||||
summary: "Scala-specific features and guidance"
|
summary: "Scala-specific features and guidance"
|
||||||
|
Added line: 9953
|
||||||
---
|
---
|
||||||
|
Added line: 4963
|
||||||
|
Added line: 5798
|
||||||
|
|
||||||
> [Scala](https://scala-lang.org/) is a modern multi-paradigm programming language designed to express common
|
|
||||||
> programming patterns in a concise, elegant, and type-safe way. It seamlessly integrates features of
|
> programming patterns in a concise, elegant, and type-safe way. It seamlessly integrates features of
|
||||||
> object-oriented and functional languages.
|
> object-oriented and functional languages.
|
||||||
|
|
||||||
{% include language_info.html name='Scala' id='scala' implementation='scala::lang.scala.ScalaLanguageModule' supports_pmd=true supports_cpd=true since='5.3.0' %}
|
Added line: 8023
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
---
|
---
|
||||||
title: T-SQL support
|
title: T-SQL support
|
||||||
permalink: pmd_languages_tsql.html
|
Added line: 5869
|
||||||
|
Added line: 611
|
||||||
last_updated: September 2023 (7.0.0)
|
last_updated: September 2023 (7.0.0)
|
||||||
tags: [languages, CpdCapableLanguage]
|
tags: [languages, CpdCapableLanguage]
|
||||||
summary: "T-SQL-specific features and guidance"
|
summary: "T-SQL-specific features and guidance"
|
||||||
---
|
|
||||||
|
|
||||||
> [Transact-SQL](https://docs.microsoft.com/en-us/sql/t-sql/language-reference) (T-SQL) is Microsoft's and Sybase's
|
> [Transact-SQL](https://docs.microsoft.com/en-us/sql/t-sql/language-reference) (T-SQL) is Microsoft's and Sybase's
|
||||||
|
Added line: 8167
|
||||||
> proprietary extension to the SQL (Structured Query Language) used to interact with relational databases.
|
> proprietary extension to the SQL (Structured Query Language) used to interact with relational databases.
|
||||||
|
|
||||||
{% include language_info.html name='T-SQL' id='tsql' implementation='tsql::lang.tsql.TSqlLanguageModule' supports_cpd=true since='6.55.0' %}
|
{% include language_info.html name='T-SQL' id='tsql' implementation='tsql::lang.tsql.TSqlLanguageModule' supports_cpd=true since='6.55.0' %}
|
||||||
|
Added line: 9456
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
|
Added line: 1359
|
||||||
---
|
---
|
||||||
|
Added line: 8843
|
||||||
title: Velocity Template Language (VTL) support
|
title: Velocity Template Language (VTL) support
|
||||||
permalink: pmd_languages_velocity.html
|
Added line: 4494
|
||||||
last_updated: February 2024 (7.0.0)
|
last_updated: February 2024 (7.0.0)
|
||||||
tags: [languages, PmdCapableLanguage, CpdCapableLanguage]
|
tags: [languages, PmdCapableLanguage, CpdCapableLanguage]
|
||||||
summary: "VTL-specific features and guidance"
|
summary: "VTL-specific features and guidance"
|
||||||
|
Added line: 2746
|
||||||
---
|
---
|
||||||
|
|
||||||
> [Velocity](https://velocity.apache.org/engine/devel/vtl-reference.html) is a Java-based template engine.
|
> [Velocity](https://velocity.apache.org/engine/devel/vtl-reference.html) is a Java-based template engine.
|
||||||
|
Added line: 7963
|
||||||
> It permits web page designers to reference methods defined in Java code.
|
> It permits web page designers to reference methods defined in Java code.
|
||||||
|
|
||||||
{% include language_info.html name='Velocity Template Language (VTL)' id='velocity' implementation='velocity::lang.velocity.VtlLanguageModule' supports_pmd=true supports_cpd=true since='5.1.0' %}
|
{% include language_info.html name='Velocity Template Language (VTL)' id='velocity' implementation='velocity::lang.velocity.VtlLanguageModule' supports_pmd=true supports_cpd=true since='5.1.0' %}
|
||||||
@ -14,6 +18,6 @@ summary: "VTL-specific features and guidance"
|
|||||||
{% capture id_change_note %}
|
{% capture id_change_note %}
|
||||||
The language id of the Velocity module was in PMD 6 just "vm". In PMD 7, this has been changed to "velocity". Also the
|
The language id of the Velocity module was in PMD 6 just "vm". In PMD 7, this has been changed to "velocity". Also the
|
||||||
package name of the classes has been changed from vm to "velocity". For classes, that used the `Vm` prefix, now `Vtl`
|
package name of the classes has been changed from vm to "velocity". For classes, that used the `Vm` prefix, now `Vtl`
|
||||||
is used as the prefix, e.g. `VtlLanguageModule`, `VtlNode`.
|
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
{% include note.html content=id_change_note %}
|
{% include note.html content=id_change_note %}
|
||||||
|
Added line: 5209
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
---
|
|
||||||
title: Visualforce Support
|
title: Visualforce Support
|
||||||
permalink: pmd_languages_visualforce.html
|
permalink: pmd_languages_visualforce.html
|
||||||
last_updated: February 2024 (7.0.0)
|
last_updated: February 2024 (7.0.0)
|
||||||
tags: [languages, PmdCapableLanguage, CpdCapableLanguage]
|
tags: [languages, PmdCapableLanguage, CpdCapableLanguage]
|
||||||
author: Andreas Dangel
|
author: Andreas Dangel
|
||||||
summary: "Visualforce-specific features and guidance"
|
summary: "Visualforce-specific features and guidance"
|
||||||
|
Added line: 9793
|
||||||
---
|
---
|
||||||
|
|
||||||
> [Visualforce](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/) consists of a tag-based markup
|
> [Visualforce](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/) consists of a tag-based markup
|
||||||
@ -31,20 +31,22 @@ Apex Controller properties and Custom Object fields. This feature improves the p
|
|||||||
like {% rule visualforce/security/VfUnescapeEl %}.
|
like {% rule visualforce/security/VfUnescapeEl %}.
|
||||||
|
|
||||||
This can be configured using two language properties, which can be set as environment variables:
|
This can be configured using two language properties, which can be set as environment variables:
|
||||||
|
Added line: 1737
|
||||||
|
|
||||||
* `PMD_VISUALFORCE_APEX_DIRECTORIES`: Comma separated list of directories for Apex classes. Absolute or relative
|
* `PMD_VISUALFORCE_APEX_DIRECTORIES`: 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
|
to the Visualforce directory. Default is `../classes`. Specifying an empty string will disable data type
|
||||||
resolution for Apex Controller properties.
|
|
||||||
|
|
||||||
* `PMD_VISUALFORCE_OBJECTS_DIRECTORIES`: Comma separated list of directories for Custom Objects. Absolute or relative
|
* `PMD_VISUALFORCE_OBJECTS_DIRECTORIES`: 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
|
to the Visualforce directory. Default is `../objects`. Specifying an empty string will disable data type
|
||||||
resolution for Custom Object fields.
|
resolution for Custom Object fields.
|
||||||
|
|
||||||
{% include warning.html content="
|
{% include warning.html content="
|
||||||
|
Added line: 4905
|
||||||
These env vars have changed from PMD 6 to PMD 7:
|
These env vars have changed from PMD 6 to PMD 7:
|
||||||
* `PMD_VF_APEXDIRECTORIES` ➡️ `PMD_VISUALFORCE_APEX_DIRECTORIES`
|
* `PMD_VF_APEXDIRECTORIES` ➡️ `PMD_VISUALFORCE_APEX_DIRECTORIES`
|
||||||
* `PMD_VF_OBJECTSDIRECTORIES` ➡️ `PMD_VISUALFORCE_OBJECTS_DIRECTORIES`
|
* `PMD_VF_OBJECTSDIRECTORIES` ➡️ `PMD_VISUALFORCE_OBJECTS_DIRECTORIES`
|
||||||
"%}
|
"%}
|
||||||
|
Added line: 9531
|
||||||
|
|
||||||
### Sample usage
|
### Sample usage
|
||||||
|
|
||||||
@ -52,9 +54,9 @@ These env vars have changed from PMD 6 to PMD 7:
|
|||||||
PMD_VISUALFORCE_APEXDIRECTORIES=../classes \
|
PMD_VISUALFORCE_APEXDIRECTORIES=../classes \
|
||||||
PMD_VISUALFORCE_OBJECTSDIRECTORIES=../objects \
|
PMD_VISUALFORCE_OBJECTSDIRECTORIES=../objects \
|
||||||
pmd check -d $GITHUB_WORKSPACE/force-app/main/default/pages \
|
pmd check -d $GITHUB_WORKSPACE/force-app/main/default/pages \
|
||||||
-R category/visualforce/security.xml/VfUnescapeEl -f text
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Added line: 9200
|
||||||
If you run with debug logging turned on, you might see log messages like this:
|
If you run with debug logging turned on, you might see log messages like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -7,12 +7,13 @@ author: Andreas Dangel <andreas.dangel@pmd-code.org>
|
|||||||
|
|
||||||
The main homepage of PMD <https://pmd.github.io> is hosted by Github Pages.
|
The main homepage of PMD <https://pmd.github.io> is hosted by Github Pages.
|
||||||
|
|
||||||
|
Added line: 8666
|
||||||
The repository is <https://github.com/pmd/pmd.github.io>.
|
The repository is <https://github.com/pmd/pmd.github.io>.
|
||||||
|
|
||||||
It uses [Jekyll](https://jekyllrb.com/) to generate the static html pages. Jekyll is
|
It uses [Jekyll](https://jekyllrb.com/) to generate the static html pages. Jekyll is
|
||||||
executed by github for every push to the repository. Please note, that it takes some time
|
executed by github for every push to the repository. Please note, that it takes some time
|
||||||
until Jekyll has been executed and due to caching, the homepage is not updated immediately.
|
|
||||||
It usually takes 15 minutes.
|
It usually takes 15 minutes.
|
||||||
|
Added line: 4796
|
||||||
|
|
||||||
|
|
||||||
## Contents
|
## Contents
|
||||||
@ -20,36 +21,39 @@ It usually takes 15 minutes.
|
|||||||
* Main page - aka "Landing page": <https://pmd.github.io>
|
* Main page - aka "Landing page": <https://pmd.github.io>
|
||||||
* Layout: [_layouts/default.html](https://github.com/pmd/pmd.github.io/blob/main/_layouts/default.html).
|
* Layout: [_layouts/default.html](https://github.com/pmd/pmd.github.io/blob/main/_layouts/default.html).
|
||||||
It includes all the sub section, which can be found in the includes directory [_includes/](https://github.com/pmd/pmd.github.io/tree/main/_includes)
|
It includes all the sub section, which can be found in the includes directory [_includes/](https://github.com/pmd/pmd.github.io/tree/main/_includes)
|
||||||
|
Added line: 4074
|
||||||
* The latest PMD version is configured in `_config.yml` and the variables `site.pmd.latestVersion` are used
|
* The latest PMD version is configured in `_config.yml` and the variables `site.pmd.latestVersion` are used
|
||||||
e.g. in [_includes/home.html](https://github.com/pmd/pmd.github.io/blob/main/_includes/home.html).
|
|
||||||
* Blog - aka "News": <https://pmd.github.io/news/>
|
* Blog - aka "News": <https://pmd.github.io/news/>
|
||||||
* This is a section on main page. It shows the 5 latest news. See [_includes/news.html](https://github.com/pmd/pmd.github.io/blob/main/_includes/news.html).
|
* This is a section on main page. It shows the 5 latest news. See [_includes/news.html](https://github.com/pmd/pmd.github.io/blob/main/_includes/news.html).
|
||||||
* There is also a sub page "news" which lists all news.
|
* There is also a sub page "news" which lists all news.
|
||||||
* Layout: [_layouts/news.html](https://github.com/pmd/pmd.github.io/blob/main/_layouts/news.html)
|
* Layout: [_layouts/news.html](https://github.com/pmd/pmd.github.io/blob/main/_layouts/news.html)
|
||||||
* Page (which is pretty empty): [news.html](https://github.com/pmd/pmd.github.io/blob/main/news.html)
|
|
||||||
|
|
||||||
## Building the page locally
|
## Building the page locally
|
||||||
|
|
||||||
|
Added line: 5814
|
||||||
Since the repository contains the documentation for many old PMD releases, it is quite big. When executing
|
Since the repository contains the documentation for many old PMD releases, it is quite big. When executing
|
||||||
Jekyll to generate the site, it copies all the files to the folder `_site/` - and this can take a while.
|
Jekyll to generate the site, it copies all the files to the folder `_site/` - and this can take a while.
|
||||||
|
Added line: 402
|
||||||
|
|
||||||
In order to speed things up locally, consider to add `pmd-*` to the exclude patterns in `_config.yml`. See
|
In order to speed things up locally, consider to add `pmd-*` to the exclude patterns in `_config.yml`. See
|
||||||
also the comments in this file.
|
also the comments in this file.
|
||||||
|
|
||||||
Then it is a matter of simply executing `bundle exec jekyll serve`. This will generate the site and host
|
Then it is a matter of simply executing `bundle exec jekyll serve`. This will generate the site and host
|
||||||
it on localhost, so you can test the page at <http://127.0.0.1:4000>.
|
|
||||||
|
|
||||||
|
|
||||||
## Updates during a release
|
## Updates during a release
|
||||||
|
|
||||||
|
Added line: 5135
|
||||||
When creating a new PMD release, some content of the main page need to be updated as well.
|
When creating a new PMD release, some content of the main page need to be updated as well.
|
||||||
|
Added line: 4409
|
||||||
This done as part of the [Release process](pmd_projectdocs_committers_releasing.html), but is
|
This done as part of the [Release process](pmd_projectdocs_committers_releasing.html), but is
|
||||||
|
Added line: 8503
|
||||||
summarized here as well:
|
summarized here as well:
|
||||||
|
|
||||||
* The versions (e.g. `pmd.latestVersion`) needs to be updated in `_config.yml`
|
* The versions (e.g. `pmd.latestVersion`) needs to be updated in `_config.yml`
|
||||||
|
Added line: 2115
|
||||||
* This is needed to generate the correct links and texts for the latest version on landing page
|
* This is needed to generate the correct links and texts for the latest version on landing page
|
||||||
* The new PMD documentation needs to be copied to `/pmd-<version>/`
|
* The new PMD documentation needs to be copied to `/pmd-<version>/`
|
||||||
* Then this folder needs to copied to `/latest/`, actually replacing the old version.
|
|
||||||
* A new blog post with release notes is added: `/_posts/YYYY-mm-dd-PMD-<version>.md`
|
* A new blog post with release notes is added: `/_posts/YYYY-mm-dd-PMD-<version>.md`
|
||||||
* The sitemap `sitemap.xml` is regenerated
|
* The sitemap `sitemap.xml` is regenerated
|
||||||
|
|
||||||
@ -70,10 +74,10 @@ Adding a new blog post is as easy as:
|
|||||||
---
|
---
|
||||||
layout: post
|
layout: post
|
||||||
title: Title
|
title: Title
|
||||||
---
|
|
||||||
|
|
||||||
Here comes the text
|
Here comes the text
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Added line: 1892
|
||||||
Once you commit and push it, Github will run Jekyll and update the page. The Jekyll templates take care that
|
Once you commit and push it, Github will run Jekyll and update the page. The Jekyll templates take care that
|
||||||
the new post is recognized and added to the news section and also on the news subpage.
|
the new post is recognized and added to the news section and also on the news subpage.
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user