danger-pmd 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +10 -4
- data/lib/pmd/entity/pmd_file.rb +3 -4
- data/lib/pmd/gem_version.rb +1 -1
- data/lib/pmd/plugin.rb +43 -20
- data/spec/pmd_spec.rb +40 -33
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a536da3a3b5d479ac3f2ecc733a3751a58a09c15c06716f1c6d712c1d22f53c9
|
4
|
+
data.tar.gz: fed8e05378b9e6cc981055fbe63d7806452ed53d64d7b85dbade5dfd6b99d129
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12b0b73c71cad94acdd1d75e49addb227067ae1fe92950c54670bd49915717ddb16e53a218cca352f6a0cb690e777c9f7d112e06a59cd1ef48c1e066243f7b47
|
7
|
+
data.tar.gz: '068f0e26176ef43f1a3d07f6fccccc1b5d5eefec9b3d6a3d82726988920132e3e0661da4be7e236a365ceeb7d821a3b00d724b1fc0c5c0f293503973f9717f28'
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -23,15 +23,15 @@ pmd.report
|
|
23
23
|
|
24
24
|
<blockquote>Running PMD with a specific Gradle task or report file (glob accepted)
|
25
25
|
<pre>
|
26
|
-
pmd.gradle_task = '
|
27
|
-
pmd.report_file = 'module/build/reports/pmd/pmd.xml' # default: app/build/reports/pmd/pmd.xml
|
26
|
+
pmd.gradle_task = 'module:pmd' # default: 'pmd'
|
27
|
+
pmd.report_file = 'module/build/reports/pmd/pmd.xml' # default: 'app/build/reports/pmd/pmd.xml'
|
28
28
|
pmd.report
|
29
29
|
</pre>
|
30
30
|
</blockquote>
|
31
31
|
|
32
32
|
<blockquote>Running PMD with a specific root path
|
33
33
|
<pre>
|
34
|
-
pmd.root_path = '/Users/developer/project'
|
34
|
+
pmd.root_path = '/Users/developer/project' # default: result of `git rev-parse --show-toplevel`
|
35
35
|
pmd.report
|
36
36
|
</pre>
|
37
37
|
</blockquote>
|
@@ -45,11 +45,17 @@ pmd.report
|
|
45
45
|
|
46
46
|
<blockquote>Running PMD without running a Gradle task
|
47
47
|
<pre>
|
48
|
-
pmd.skip_gradle_task = true
|
48
|
+
pmd.skip_gradle_task = true # default: false
|
49
49
|
pmd.report
|
50
50
|
</pre>
|
51
51
|
</blockquote>
|
52
52
|
|
53
|
+
<blockquote>Running PMD without inline comment
|
54
|
+
<pre>
|
55
|
+
pmd.report(inline_mode: false) # default: true
|
56
|
+
</pre>
|
57
|
+
</blockquote>
|
58
|
+
|
53
59
|
#### Attributes
|
54
60
|
|
55
61
|
`gradle_task` - Custom Gradle task to run.
|
data/lib/pmd/entity/pmd_file.rb
CHANGED
@@ -20,10 +20,9 @@ class PmdFile
|
|
20
20
|
@file = file
|
21
21
|
@absolute_path = file.attribute('name').value.to_s
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
@absolute_path[@prefix.length, @absolute_path.length - @prefix.length]
|
23
|
+
prefix += (prefix.end_with?(file_separator) ? '' : file_separator)
|
24
|
+
@relative_path = if @absolute_path.start_with?(prefix)
|
25
|
+
@absolute_path[prefix.length, @absolute_path.length - prefix.length]
|
27
26
|
else
|
28
27
|
@absolute_path
|
29
28
|
end
|
data/lib/pmd/gem_version.rb
CHANGED
data/lib/pmd/plugin.rb
CHANGED
@@ -11,13 +11,13 @@ module Danger
|
|
11
11
|
#
|
12
12
|
# @example Running PMD with a specific Gradle task or report file (glob accepted)
|
13
13
|
#
|
14
|
-
# pmd.gradle_task = '
|
15
|
-
# pmd.report_file = 'module/build/reports/pmd/pmd.xml' # default: app/build/reports/pmd/pmd.xml
|
14
|
+
# pmd.gradle_task = 'module:pmd' # default: 'pmd'
|
15
|
+
# pmd.report_file = 'module/build/reports/pmd/pmd.xml' # default: 'app/build/reports/pmd/pmd.xml'
|
16
16
|
# pmd.report
|
17
17
|
#
|
18
18
|
# @example Running PMD with a specific root path
|
19
19
|
#
|
20
|
-
# pmd.root_path = '/Users/developer/project'
|
20
|
+
# pmd.root_path = '/Users/developer/project' # default: result of `git rev-parse --show-toplevel`
|
21
21
|
# pmd.report
|
22
22
|
#
|
23
23
|
# @example Running PMD with an array of report files (glob accepted)
|
@@ -27,9 +27,13 @@ module Danger
|
|
27
27
|
#
|
28
28
|
# @example Running PMD without running a Gradle task
|
29
29
|
#
|
30
|
-
# pmd.skip_gradle_task = true
|
30
|
+
# pmd.skip_gradle_task = true # default: false
|
31
31
|
# pmd.report
|
32
32
|
#
|
33
|
+
# @example Running PMD without inline comment
|
34
|
+
#
|
35
|
+
# pmd.report(inline_mode: false) # default: true
|
36
|
+
#
|
33
37
|
# @see mathroule/danger-pmd
|
34
38
|
# @tags java, android, pmd
|
35
39
|
class DangerPmd < Plugin
|
@@ -38,10 +42,12 @@ module Danger
|
|
38
42
|
# Custom Gradle task to run.
|
39
43
|
# This is useful when your project has different flavors.
|
40
44
|
# Defaults to 'pmd'.
|
45
|
+
#
|
41
46
|
# @return [String]
|
42
47
|
attr_writer :gradle_task
|
43
48
|
|
44
49
|
# A getter for `gradle_task`, returning 'pmd' if value is nil.
|
50
|
+
#
|
45
51
|
# @return [String]
|
46
52
|
def gradle_task
|
47
53
|
@gradle_task ||= 'pmd'
|
@@ -50,10 +56,12 @@ module Danger
|
|
50
56
|
# Skip Gradle task.
|
51
57
|
# If you skip Gradle task, for example project does not manage Gradle.
|
52
58
|
# Defaults to `false`.
|
53
|
-
#
|
59
|
+
#
|
60
|
+
# @return [Boolean]
|
54
61
|
attr_writer :skip_gradle_task
|
55
62
|
|
56
63
|
# A getter for `skip_gradle_task`, returning false if value is nil.
|
64
|
+
#
|
57
65
|
# @return [Boolean]
|
58
66
|
def skip_gradle_task
|
59
67
|
@skip_gradle_task ||= false
|
@@ -62,34 +70,40 @@ module Danger
|
|
62
70
|
# An absolute path to a root.
|
63
71
|
# To comment errors to VCS, this needs to know relative path of files from the root.
|
64
72
|
# Defaults to result of 'git rev-parse --show-toplevel'.
|
65
|
-
#
|
73
|
+
#
|
74
|
+
# @return [String]
|
66
75
|
attr_writer :root_path
|
67
76
|
|
68
|
-
# A getter for `root_path`, returning result of
|
77
|
+
# A getter for `root_path`, returning result of `git rev-parse --show-toplevel` if value is nil.
|
78
|
+
#
|
69
79
|
# @return [String]
|
70
80
|
def root_path
|
71
81
|
@root_path ||= `git rev-parse --show-toplevel`.chomp
|
72
82
|
end
|
73
83
|
|
74
84
|
# Location of report file.
|
75
|
-
# If your
|
85
|
+
# If your PMD task task outputs to a different location, you can specify it here.
|
76
86
|
# Defaults to 'app/build/reports/pmd/pmd.xml'.
|
87
|
+
#
|
77
88
|
# @return [String]
|
78
89
|
attr_writer :report_file
|
79
90
|
|
80
91
|
# A getter for `report_file`, returning 'app/build/reports/pmd/pmd.xml' if value is nil.
|
92
|
+
#
|
81
93
|
# @return [String]
|
82
94
|
def report_file
|
83
95
|
@report_file ||= 'app/build/reports/pmd/pmd.xml'
|
84
96
|
end
|
85
97
|
|
86
98
|
# Location of report files.
|
87
|
-
# If your
|
99
|
+
# If your PMD task outputs to a different location, you can specify it here.
|
88
100
|
# Defaults to ['app/build/reports/pmd/pmd.xml'].
|
101
|
+
#
|
89
102
|
# @return [Array[String]]
|
90
103
|
attr_writer :report_files
|
91
104
|
|
92
105
|
# A getter for `report_files`, returning ['app/build/reports/pmd/pmd.xml'] if value is nil.
|
106
|
+
#
|
93
107
|
# @return [Array[String]]
|
94
108
|
def report_files
|
95
109
|
@report_files ||= [report_file]
|
@@ -99,6 +113,9 @@ module Danger
|
|
99
113
|
# It fails if `gradlew` cannot be found inside current directory.
|
100
114
|
# It fails if `report_file` cannot be found inside current directory.
|
101
115
|
# It fails if `report_files` is empty.
|
116
|
+
#
|
117
|
+
# @param [Boolean] inline_mode Report as inline comment, defaults to [true].
|
118
|
+
#
|
102
119
|
# @return [Array[PmdFile]]
|
103
120
|
def report(inline_mode: true)
|
104
121
|
unless skip_gradle_task
|
@@ -116,24 +133,23 @@ module Danger
|
|
116
133
|
private
|
117
134
|
|
118
135
|
# Check gradlew file exists in current directory.
|
119
|
-
#
|
136
|
+
#
|
137
|
+
# @return [Boolean]
|
120
138
|
def gradlew_exists?
|
121
139
|
!`ls gradlew`.strip.empty?
|
122
140
|
end
|
123
141
|
|
124
142
|
# Run Gradle task.
|
143
|
+
#
|
125
144
|
# @return [void]
|
126
145
|
def exec_gradle_task
|
127
146
|
system "./gradlew #{gradle_task}"
|
128
147
|
end
|
129
148
|
|
130
|
-
# Check report_file exists in current directory.
|
131
|
-
# @return [Bool]
|
132
|
-
def report_file_exist?(report_file)
|
133
|
-
File.exist?(report_file)
|
134
|
-
end
|
135
|
-
|
136
149
|
# A getter for `pmd_report`, returning PMD report.
|
150
|
+
#
|
151
|
+
# @param [String] report_file The report file.
|
152
|
+
#
|
137
153
|
# @return [Oga::XML::Document]
|
138
154
|
def pmd_report(report_file)
|
139
155
|
require 'oga'
|
@@ -141,6 +157,9 @@ module Danger
|
|
141
157
|
end
|
142
158
|
|
143
159
|
# A getter for PMD issues, returning PMD issues.
|
160
|
+
#
|
161
|
+
# @param [String] report_file The report file.
|
162
|
+
#
|
144
163
|
# @return [Array[PmdFile]]
|
145
164
|
def pmd_issues(report_file)
|
146
165
|
pmd_report(report_file).xpath('//file').map do |pmd_file|
|
@@ -149,12 +168,16 @@ module Danger
|
|
149
168
|
end
|
150
169
|
|
151
170
|
# A getter for current updated files.
|
171
|
+
#
|
152
172
|
# @return [Array[String]]
|
153
173
|
def target_files
|
154
174
|
@target_files ||= (git.modified_files - git.deleted_files) + git.added_files
|
155
175
|
end
|
156
176
|
|
157
177
|
# Generate report and send inline comment with Danger's warn or fail method.
|
178
|
+
#
|
179
|
+
# @param [Boolean] inline_mode Report as inline comment, defaults to [true].
|
180
|
+
#
|
158
181
|
# @return [Array[PmdFile]]
|
159
182
|
def do_comment(report_files, inline_mode)
|
160
183
|
pmd_issues = []
|
@@ -163,16 +186,16 @@ module Danger
|
|
163
186
|
pmd_issues(report_file).each do |pmd_file|
|
164
187
|
next unless target_files.include? pmd_file.relative_path
|
165
188
|
|
166
|
-
|
189
|
+
pmd_issues.push(pmd_file)
|
190
|
+
|
191
|
+
send_comment(pmd_file, inline_mode)
|
167
192
|
end
|
168
193
|
end
|
169
194
|
|
170
195
|
pmd_issues
|
171
196
|
end
|
172
197
|
|
173
|
-
def
|
174
|
-
pmd_issues.push(pmd_file)
|
175
|
-
|
198
|
+
def send_comment(pmd_file, inline_mode)
|
176
199
|
pmd_file.violations.each do |pmd_violation|
|
177
200
|
if inline_mode
|
178
201
|
send(pmd_violation.type, pmd_violation.description, file: pmd_file.relative_path, line: pmd_violation.line)
|
data/spec/pmd_spec.rb
CHANGED
@@ -19,19 +19,26 @@ module Danger
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'Set custom Gradle task' do
|
22
|
-
|
23
|
-
@pmd.gradle_task
|
24
|
-
expect(@pmd.gradle_task).to eq(custom_task)
|
22
|
+
@pmd.gradle_task = 'pmdStagingDebug'
|
23
|
+
expect(@pmd.gradle_task).to eq('pmdStagingDebug')
|
25
24
|
end
|
26
25
|
|
27
26
|
it 'Check default skip Gradle task' do
|
28
|
-
expect(@pmd.skip_gradle_task).to
|
27
|
+
expect(@pmd.skip_gradle_task).to be_falsey
|
29
28
|
end
|
30
29
|
|
31
30
|
it 'Set custom skip Gradle task' do
|
32
|
-
skip_gradle_task = true
|
33
|
-
@pmd.skip_gradle_task
|
34
|
-
|
31
|
+
@pmd.skip_gradle_task = true
|
32
|
+
expect(@pmd.skip_gradle_task).to be_truthy
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'Check default root path' do
|
36
|
+
expect(@pmd.root_path).to eq(Dir.pwd)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'Set custom root path' do
|
40
|
+
@pmd.root_path = '/Users/developer/project'
|
41
|
+
expect(@pmd.root_path).to eq('/Users/developer/project')
|
35
42
|
end
|
36
43
|
|
37
44
|
it 'Check default report file path' do
|
@@ -39,19 +46,17 @@ module Danger
|
|
39
46
|
end
|
40
47
|
|
41
48
|
it 'Set custom report file path' do
|
42
|
-
|
43
|
-
@pmd.report_file
|
44
|
-
expect(@pmd.report_file).to eq(custom_report_path)
|
49
|
+
@pmd.report_file = 'custom-path/pmd_sub_report.xml'
|
50
|
+
expect(@pmd.report_file).to eq('custom-path/pmd_sub_report.xml')
|
45
51
|
end
|
46
52
|
|
47
53
|
it 'Check default report files paths' do
|
48
|
-
expect(@pmd.report_files).to
|
54
|
+
expect(@pmd.report_files).to contain_exactly('app/build/reports/pmd/pmd.xml')
|
49
55
|
end
|
50
56
|
|
51
57
|
it 'Set custom report files paths' do
|
52
|
-
|
53
|
-
@pmd.report_files
|
54
|
-
expect(@pmd.report_files).to eq(custom_report_paths)
|
58
|
+
@pmd.report_files = %w[custom-path/pmd_report_1.xml custom-path/pmd_report_2.xml]
|
59
|
+
expect(@pmd.report_files).to contain_exactly('custom-path/pmd_report_1.xml', 'custom-path/pmd_report_2.xml')
|
55
60
|
end
|
56
61
|
|
57
62
|
it 'Check default root path' do
|
@@ -59,17 +64,17 @@ module Danger
|
|
59
64
|
end
|
60
65
|
|
61
66
|
it 'Set custom root path' do
|
62
|
-
root_path = '/Users/developer/sample/'
|
63
|
-
@pmd.root_path
|
64
|
-
expect(@pmd.root_path).to eq(root_path)
|
67
|
+
@pmd.root_path = '/Users/developer/sample/'
|
68
|
+
expect(@pmd.root_path).to eq('/Users/developer/sample/')
|
65
69
|
end
|
66
70
|
|
67
71
|
it 'Report with report file' do
|
72
|
+
# noinspection RubyLiteralArrayInspection
|
68
73
|
target_files = [
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
74
|
+
'app/src/main/java/com/android/sample/MainActivity.java',
|
75
|
+
'app/src/main/java/com/android/sample/Tools.java',
|
76
|
+
'app/src/test/java/com/android/sample/ExampleUnitTest.java',
|
77
|
+
'app/src/test/java/com/android/sample/ToolsTest.java'
|
73
78
|
]
|
74
79
|
allow_any_instance_of(Danger::DangerPmd).to receive(:target_files).and_return(target_files)
|
75
80
|
|
@@ -125,15 +130,16 @@ module Danger
|
|
125
130
|
expect(pmd_issue4.violations[1].description).to eq("The JUnit 4 test method name 'getLabel_2' doesn't match '[a-z][a-zA-Z0-9]*'")
|
126
131
|
end
|
127
132
|
|
128
|
-
it
|
133
|
+
it 'Report with report file not in target files' do
|
134
|
+
# noinspection RubyLiteralArrayInspection
|
129
135
|
target_files = [
|
130
|
-
|
131
|
-
|
136
|
+
'app/src/main/java/com/android/sample/Tools.java',
|
137
|
+
'app/src/test/java/com/android/sample/ToolsTest.java'
|
132
138
|
]
|
133
139
|
allow_any_instance_of(Danger::DangerPmd).to receive(:target_files).and_return(target_files)
|
134
140
|
|
135
|
-
@pmd.report_file =
|
136
|
-
@pmd.root_path =
|
141
|
+
@pmd.report_file = 'spec/fixtures/pmd_report.xml'
|
142
|
+
@pmd.root_path = '/Users/developer/sample/'
|
137
143
|
@pmd.skip_gradle_task = true
|
138
144
|
|
139
145
|
pmd_issues = @pmd.report
|
@@ -164,14 +170,15 @@ module Danger
|
|
164
170
|
expect(pmd_issue2.violations[1].description).to eq("The JUnit 4 test method name 'getLabel_2' doesn't match '[a-z][a-zA-Z0-9]*'")
|
165
171
|
end
|
166
172
|
|
167
|
-
it
|
173
|
+
it 'Report with report files' do
|
174
|
+
# noinspection RubyLiteralArrayInspection
|
168
175
|
target_files = [
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
176
|
+
'app/src/main/java/com/android/sample/Application.java',
|
177
|
+
'app/src/main/java/com/android/sample/MainActivity.java',
|
178
|
+
'app/src/main/java/com/android/sample/Tools.java',
|
179
|
+
'app/src/main/java/com/android/sample/Utils.java',
|
180
|
+
'app/src/test/java/com/android/sample/ExampleUnitTest.java',
|
181
|
+
'app/src/test/java/com/android/sample/ToolsTest.java'
|
175
182
|
]
|
176
183
|
allow_any_instance_of(Danger::DangerPmd).to receive(:target_files).and_return(target_files)
|
177
184
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: danger-pmd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mathieu Rul
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: danger-plugin-api
|