Skip to content

Commit aef9c32

Browse files
committed
DiffParser #95
1 parent 513d19e commit aef9c32

File tree

8 files changed

+168
-0
lines changed

8 files changed

+168
-0
lines changed

CHANGELOG.md

+9
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33

44
Changelog of Violations lib.
55

6+
## Unreleased
7+
### GitHub [#95](https://github.com/tomasbjerre/violations-lib/issues/95) Add support for "suggested change" *enhancement*
8+
9+
**DiffParser**
10+
11+
12+
[e282c85c4e58980](https://github.com/tomasbjerre/violations-lib/commit/e282c85c4e58980) Tomas Bjerre *2020-09-06 07:03:03*
13+
14+
615
## 1.127
716
### GitHub [#95](https://github.com/tomasbjerre/violations-lib/issues/95) Add support for "suggested change" *enhancement*
817

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ A number of **parsers** have been implemented. Some **parsers** can parse output
5353
| [_PHPCS_](https://github.com/squizlabs/PHP_CodeSniffer) | `CHECKSTYLE` | With `phpcs api.php --report=checkstyle`.
5454
| [_PHPPMD_](https://phpmd.org/) | `PMD` | With `phpmd api.php xml ruleset.xml`.
5555
| [_PMD_](https://pmd.github.io/) | `PMD` |
56+
| [_Patch_](https://en.wikipedia.org/wiki/Diff) | `DIFF` | Unidiff, often used by the `patch` program.
5657
| [_Pep8_](https://github.com/PyCQA/pycodestyle) | `FLAKE8` |
5758
| [_PerlCritic_](https://github.com/Perl-Critic) | `PERLCRITIC` |
5859
| [_PiTest_](http://pitest.org/) | `PITEST` |

build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ apply from: project.buildscript.classLoader.getResource('release.gradle').toURI(
2121

2222
dependencies {
2323
compile 'com.google.code.gson:gson:2.8.2'
24+
compile 'io.github.java-diff-utils:java-diff-utils:4.7'
2425
compileOnly 'com.github.spotbugs:spotbugs-annotations:3.1.12'
2526
testCompile 'junit:junit:4.12'
2627
testCompile 'org.assertj:assertj-core:2.3.0'
2728
testCompile 'uk.co.jemos.podam:podam:7.2.1.RELEASE'
2829
}
2930

3031
shadowJar {
32+
relocate 'io.github', safeJavaIdentidier(project.group + '.' + project.name + '.io.github')
3133
relocate 'com.google', safeJavaIdentidier(project.group + '.' + project.name + '.com.google')
3234
relocate 'com.jakewharton', safeJavaIdentidier(project.group + '.' + project.name + '.com.jakewharton')
3335
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package se.bjurr.violations.lib.parsers;
2+
3+
import static java.nio.charset.StandardCharsets.UTF_8;
4+
import static java.util.stream.Collectors.joining;
5+
import static se.bjurr.violations.lib.model.Violation.violationBuilder;
6+
import static se.bjurr.violations.lib.reports.Parser.DIFF;
7+
8+
import com.github.difflib.patch.AbstractDelta;
9+
import com.github.difflib.patch.ChangeDelta;
10+
import com.github.difflib.patch.DeltaType;
11+
import com.github.difflib.patch.Patch;
12+
import com.github.difflib.unifieddiff.UnifiedDiff;
13+
import com.github.difflib.unifieddiff.UnifiedDiffFile;
14+
import com.github.difflib.unifieddiff.UnifiedDiffReader;
15+
import java.io.ByteArrayInputStream;
16+
import java.io.InputStream;
17+
import java.util.Set;
18+
import java.util.TreeSet;
19+
import se.bjurr.violations.lib.ViolationsLogger;
20+
import se.bjurr.violations.lib.model.SEVERITY;
21+
import se.bjurr.violations.lib.model.Violation;
22+
23+
public class DiffParser implements ViolationsParser {
24+
25+
@Override
26+
public Set<Violation> parseReportOutput(String reportContent, ViolationsLogger violationsLogger)
27+
throws Exception {
28+
Set<Violation> violations = new TreeSet<>();
29+
InputStream reportContentStream = new ByteArrayInputStream(reportContent.getBytes(UTF_8));
30+
UnifiedDiff parsedDiff = UnifiedDiffReader.parseUnifiedDiff(reportContentStream);
31+
for (UnifiedDiffFile diffFile : parsedDiff.getFiles()) {
32+
String file = diffFile.getFromFile();
33+
Patch<String> patch = diffFile.getPatch();
34+
for (AbstractDelta<?> delta : patch.getDeltas()) {
35+
if (delta.getType() == DeltaType.CHANGE) {
36+
@SuppressWarnings("unchecked")
37+
ChangeDelta<String> changeDelta = (ChangeDelta<String>) delta;
38+
String fromString =
39+
changeDelta.getSource().getLines().stream().collect(joining("\n")).trim();
40+
int fromLine = changeDelta.getSource().getPosition();
41+
String toString =
42+
changeDelta.getTarget().getLines().stream().collect(joining("\n")).trim();
43+
changeDelta.getTarget().getPosition();
44+
45+
violations.add(
46+
violationBuilder()
47+
.setParser(DIFF)
48+
.setFile(file)
49+
.setStartLine(fromLine)
50+
.setMessage(fromString + "\n\nTo:\n\n" + toString)
51+
.setSeverity(SEVERITY.ERROR)
52+
.build());
53+
}
54+
}
55+
}
56+
return violations;
57+
}
58+
}

src/main/java/se/bjurr/violations/lib/reports/Parser.java

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import se.bjurr.violations.lib.parsers.CodeClimateParser;
2121
import se.bjurr.violations.lib.parsers.CodeNarcParser;
2222
import se.bjurr.violations.lib.parsers.CppLintParser;
23+
import se.bjurr.violations.lib.parsers.DiffParser;
2324
import se.bjurr.violations.lib.parsers.DocFXParser;
2425
import se.bjurr.violations.lib.parsers.FindbugsParser;
2526
import se.bjurr.violations.lib.parsers.Flake8Parser;
@@ -79,6 +80,7 @@ public enum Parser {
7980
KOTLINGRADLE(new KotlinGradleParser()), //
8081
MSCPP(new MSCPPParser()), //
8182
MYPY(new MyPyParser()), //
83+
DIFF(new DiffParser()), //
8284
GOLINT(new GoLintParser()), //
8385
GOOGLEERRORPRONE(new GoogleErrorProneParser()), //
8486
PERLCRITIC(new PerlCriticParser()), //

src/main/java/se/bjurr/violations/lib/reports/Reporter.java

+5
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ public enum Reporter {
9797
Parser.GOOGLEERRORPRONE,
9898
"https://github.com/uber/NullAway",
9999
"Same format as Google Error Prone."),
100+
DIFF(
101+
"Patch",
102+
Parser.DIFF,
103+
"https://en.wikipedia.org/wiki/Diff",
104+
"Unidiff, often used by the `patch` program."),
100105
PCLINT(
101106
"PCLint",
102107
Parser.PCLINT,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package se.bjurr.violations.lib;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static se.bjurr.violations.lib.TestUtils.getRootFolder;
5+
import static se.bjurr.violations.lib.ViolationsApi.violationsApi;
6+
import static se.bjurr.violations.lib.model.SEVERITY.ERROR;
7+
import static se.bjurr.violations.lib.reports.Parser.DIFF;
8+
9+
import java.util.ArrayList;
10+
import java.util.Set;
11+
import org.junit.Test;
12+
import se.bjurr.violations.lib.model.Violation;
13+
14+
public class DiffTest {
15+
16+
@Test
17+
public void testChanged() {
18+
final String rootFolder = getRootFolder();
19+
20+
final Set<Violation> actual =
21+
violationsApi() //
22+
.withPattern(".*/diff/0001-.*") //
23+
.inFolder(rootFolder) //
24+
.findAll(DIFF) //
25+
.violations();
26+
27+
assertThat(actual) //
28+
.hasSize(2);
29+
30+
Violation v0 = new ArrayList<>(actual).get(0);
31+
assertThat(v0.getMessage()) //
32+
.startsWith("Changelog of Violations lib");
33+
assertThat(v0.getFile()) //
34+
.isEqualTo("CHANGELOG.md");
35+
assertThat(v0.getSeverity()) //
36+
.isEqualTo(ERROR);
37+
assertThat(v0.getStartLine()) //
38+
.isEqualTo(2);
39+
40+
Violation v1 = new ArrayList<>(actual).get(1);
41+
assertThat(v1.getMessage()) //
42+
.startsWith("version = 1.127");
43+
assertThat(v1.getFile()) //
44+
.isEqualTo("gradle.properties");
45+
assertThat(v1.getSeverity()) //
46+
.isEqualTo(ERROR);
47+
assertThat(v1.getStartLine()) //
48+
.isEqualTo(0);
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
From 513d19e33d0a78b778bc2cd33551a300e7605975 Mon Sep 17 00:00:00 2001
2+
From: Tomas Bjerre <[email protected]>
3+
Date: Sun, 6 Sep 2020 07:26:13 +0200
4+
Subject: [PATCH] [Gradle Release Plugin] - new version commit:
5+
'1.128-SNAPSHOT'.
6+
7+
---
8+
CHANGELOG.md | 9 +++++++++
9+
gradle.properties | 2 +-
10+
2 files changed, 10 insertions(+), 1 deletion(-)
11+
12+
diff --git a/CHANGELOG.md b/CHANGELOG.md
13+
index 7b2cb23..a1ee761 100644
14+
--- a/CHANGELOG.md
15+
+++ b/CHANGELOG.md
16+
@@ -3,6 +3,15 @@
17+
18+
Changelog of Violations lib.
19+
20+
+## 1.127
21+
+### GitHub [#95](https://github.com/tomasbjerre/violations-lib/issues/95) Add support for &quot;suggested change&quot; *enhancement*
22+
+
23+
+**Moving PatchParser from violation-comments-lib**
24+
+
25+
+
26+
+[5c52a3933792d14](https://github.com/tomasbjerre/violations-lib/commit/5c52a3933792d14) Tomas Bjerre *2020-09-06 05:24:56*
27+
+
28+
+
29+
## 1.126
30+
### GitHub [#95](https://github.com/tomasbjerre/violations-lib/issues/95) Add support for &quot;suggested change&quot; *enhancement*
31+
32+
diff --git a/gradle.properties b/gradle.properties
33+
index aca4c1a..eda4430 100644
34+
--- a/gradle.properties
35+
+++ b/gradle.properties
36+
@@ -1 +1 @@
37+
-version = 1.127
38+
+version = 1.128-SNAPSHOT
39+
--
40+
2.25.1
41+

0 commit comments

Comments
 (0)