Compare commits

...

2 commits

Author SHA1 Message Date
c9902c88ef Added README 2023-04-14 10:02:26 -07:00
870f48e971 Switched to varargs for adding paths and rule sets 2023-04-14 10:01:57 -07:00
3 changed files with 57 additions and 12 deletions

37
README.md Executable file
View file

@ -0,0 +1,37 @@
# [Bld](https://rife2.com/bld) Extension to Perform Static Code Analysis with [PMD](https://pmd.github.io/)
[![License (3-Clause BSD)](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg?style=flat-square)](http://opensource.org/licenses/BSD-3-Clause)
[![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
[![GitHub CI](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml)
To check all source code using the [java quickstart rule](https://pmd.github.io/pmd/pmd_rules_java.html).
```java
@BuildCommand
public void pmd() throws Exception {
new PmdOperation(this).execute();
}
```
```text
./bld pmd test
```
To check the main source code using a custom rule, [java error prone rule](https://pmd.github.io/pmd/pmd_rules_java.html) and failing on any violation.
```java
@BuildCommand
public void pmdMain() throws Exception {
new PmdOperation(this)
.failOnValidation(true)
.addInputPath(project.srcMainDirectory().toPath())
.addRuletSet("config/pmd.xml", "category/java/errorprone.xml");
.execute();
}
```
```text
./dld compile pmdMain
```
Please check the [PmdOperation documentation](https://rife2.github.io/bld-pmd/rife/bld/extension/PmdOperation.html#method-summary) for all available configuration options.

View file

@ -43,12 +43,13 @@ public class PmdOperation extends AbstractOperation<PmdOperation> {
/**
* The default rule set.
*/
public static final String RULESET_DEFAULT = "rulesets/java/quickstart.xml";
public static final String RULE_SET_DEFAULT = "rulesets/java/quickstart.xml";
private static final Logger LOGGER = Logger.getLogger(PmdOperation.class.getName());
private static final String PMD_DIR = "pmd";
/**
* The cache location.
*
*/
Path cache;
/**
@ -154,21 +155,21 @@ public class PmdOperation extends AbstractOperation<PmdOperation> {
inputPaths.add(project.srcMainDirectory().toPath());
inputPaths.add(project.srcTestDirectory().toPath());
ruleSets.add(RULESET_DEFAULT);
ruleSets.add(RULE_SET_DEFAULT);
}
/**
* Adds the path to a source file, or directory containing source files to analyze.
* Adds paths to source files, or directories containing source files to analyze.
*
* @see #inputPaths(Path...)
*/
public PmdOperation addInputPath(Path inputPath) {
inputPaths.add(inputPath);
public PmdOperation addInputPath(Path... inputPath) {
inputPaths.addAll(List.of(inputPath));
return this;
}
/**
* Adds a new rule set path.
* Adds new rule set paths.
* <p>
* The built-in rule set paths are:
* <ul>
@ -185,8 +186,8 @@ public class PmdOperation extends AbstractOperation<PmdOperation> {
*
* @see #ruleSets(String...)
*/
public PmdOperation addRuleSet(String ruleSet) {
ruleSets.add(ruleSet);
public PmdOperation addRuleSet(String... ruleSet) {
ruleSets.addAll(List.of(ruleSet));
return this;
}

View file

@ -69,28 +69,35 @@ public class PmdOperationTest {
void testJavaErrorProne() {
var pmd = pmdOperation.ruleSets("category/java/errorprone.xml");
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)))
.as("no errors").isGreaterThan(0);
.as("many errors").isGreaterThan(0);
}
@Test
void testJavaCodeStyleAndErrorProne() {
var pmd = pmdOperation.addRuleSet("category/java/codestyle.xml", "category/java/errorprone.xml");
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)))
.as("many errors").isGreaterThan(0);
}
@Test
void testJavaCodeStyle() {
var pmd = pmdOperation.ruleSets("category/java/codestyle.xml");
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)))
.as("no errors").isGreaterThan(0);
.as("many errors").isGreaterThan(0);
}
@Test
void testJavaDesign() {
var pmd = pmdOperation.ruleSets("category/java/design.xml");
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)))
.as("no errors").isGreaterThan(0);
.as("many errors").isGreaterThan(0);
}
@Test
void testJavaDocumentation() {
var pmd = pmdOperation.ruleSets("category/java/documentation.xml");
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)))
.as("no errors").isGreaterThan(0);
.as("many errors").isGreaterThan(0);
}
@Test