Skip to content

Commit 582711c

Browse files
committed
DiffParser #95
1 parent 513d19e commit 582711c

File tree

7 files changed

+155
-4
lines changed

7 files changed

+155
-4
lines changed

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` | Often called 'patch'.
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,57 @@
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 java.io.ByteArrayInputStream;
9+
import java.io.InputStream;
10+
import java.util.Set;
11+
import java.util.TreeSet;
12+
13+
import com.github.difflib.patch.AbstractDelta;
14+
import com.github.difflib.patch.ChangeDelta;
15+
import com.github.difflib.patch.DeltaType;
16+
import com.github.difflib.patch.Patch;
17+
import com.github.difflib.unifieddiff.UnifiedDiff;
18+
import com.github.difflib.unifieddiff.UnifiedDiffFile;
19+
import com.github.difflib.unifieddiff.UnifiedDiffReader;
20+
21+
import se.bjurr.violations.lib.ViolationsLogger;
22+
import se.bjurr.violations.lib.model.SEVERITY;
23+
import se.bjurr.violations.lib.model.Violation;
24+
25+
public class DiffParser implements ViolationsParser {
26+
27+
@Override
28+
public Set<Violation> parseReportOutput(String reportContent, ViolationsLogger violationsLogger) throws Exception {
29+
Set<Violation> violations = new TreeSet<>();
30+
InputStream reportContentStream = new ByteArrayInputStream(reportContent.getBytes(UTF_8));
31+
UnifiedDiff parsedDiff = UnifiedDiffReader.parseUnifiedDiff(reportContentStream);
32+
for(UnifiedDiffFile diffFile : parsedDiff.getFiles()) {
33+
String file = diffFile.getFromFile();
34+
Patch<String> patch = diffFile.getPatch();
35+
for (AbstractDelta<?> delta : patch.getDeltas()) {
36+
if (delta.getType() == DeltaType.CHANGE) {
37+
@SuppressWarnings("unchecked")
38+
ChangeDelta<String> changeDelta = (ChangeDelta<String>)delta;
39+
String fromString = changeDelta.getSource().getLines().stream().collect(joining("\n"));
40+
int fromLine = changeDelta.getSource().getPosition();
41+
String toString = changeDelta.getTarget().getLines().stream().collect(joining("\n"));
42+
changeDelta.getTarget().getPosition();
43+
44+
violations.add(violationBuilder()
45+
.setParser(DIFF)
46+
.setFile(file)
47+
.setStartLine(fromLine)
48+
.setMessage(fromString+"\n\nTo:\n\n"+toString)
49+
.setSeverity(SEVERITY.ERROR)
50+
.build());
51+
}
52+
}
53+
}
54+
return violations;
55+
}
56+
57+
}

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

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.Set;
1010
import java.util.TreeSet;
1111
import java.util.logging.Logger;
12+
1213
import se.bjurr.violations.lib.ViolationsLogger;
1314
import se.bjurr.violations.lib.model.Violation;
1415
import se.bjurr.violations.lib.parsers.AndroidLintParser;
@@ -39,6 +40,7 @@
3940
import se.bjurr.violations.lib.parsers.MyPyParser;
4041
import se.bjurr.violations.lib.parsers.PCLintParser;
4142
import se.bjurr.violations.lib.parsers.PMDParser;
43+
import se.bjurr.violations.lib.parsers.DiffParser;
4244
import se.bjurr.violations.lib.parsers.PerlCriticParser;
4345
import se.bjurr.violations.lib.parsers.PiTestParser;
4446
import se.bjurr.violations.lib.parsers.ProtoLintParser;
@@ -79,6 +81,7 @@ public enum Parser {
7981
KOTLINGRADLE(new KotlinGradleParser()), //
8082
MSCPP(new MSCPPParser()), //
8183
MYPY(new MyPyParser()), //
84+
DIFF(new DiffParser()), //
8285
GOLINT(new GoLintParser()), //
8386
GOOGLEERRORPRONE(new GoogleErrorProneParser()), //
8487
PERLCRITIC(new PerlCriticParser()), //

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

+9-4
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,15 @@ public enum Reporter {
9393
MYPY("MyPy", Parser.MYPY, "https://pypi.python.org/pypi/mypy-lang", ""),
9494
MSCPP("MSCpp", Parser.MSCPP, "https://visualstudio.microsoft.com/vs/features/cplusplus/", ""),
9595
NULLAWAY(
96-
"NullAway",
97-
Parser.GOOGLEERRORPRONE,
98-
"https://github.com/uber/NullAway",
99-
"Same format as Google Error Prone."),
96+
"NullAway",
97+
Parser.GOOGLEERRORPRONE,
98+
"https://github.com/uber/NullAway",
99+
"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,42 @@
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.INFO;
7+
import static se.bjurr.violations.lib.reports.Parser.DIFF;
8+
9+
import java.util.ArrayList;
10+
import java.util.Set;
11+
12+
import org.junit.Test;
13+
14+
import se.bjurr.violations.lib.model.Violation;
15+
16+
public class DiffTest {
17+
18+
@Test
19+
public void testThatGoVetViolationsCanBeParsed() {
20+
final String rootFolder = getRootFolder();
21+
22+
final Set<Violation> actual =
23+
violationsApi() //
24+
.withPattern(".*/diff/0001-.*") //
25+
.inFolder(rootFolder) //
26+
.findAll(DIFF) //
27+
.violations();
28+
29+
assertThat(actual) //
30+
.hasSize(3);
31+
32+
Violation violation0 = new ArrayList<>(actual).get(0);
33+
assertThat(violation0.getMessage()) //
34+
.isEqualTo("this is a message");
35+
assertThat(violation0.getFile()) //
36+
.isEqualTo("my_file.go");
37+
assertThat(violation0.getSeverity()) //
38+
.isEqualTo(INFO);
39+
assertThat(violation0.getStartLine()) //
40+
.isEqualTo(46);
41+
}
42+
}
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)