pmdtester 1.6.2 → 1.7.0

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -0
  3. data/.github/workflows/build.yml +7 -7
  4. data/.github/workflows/manual-integration-tests.yml +7 -7
  5. data/.github/workflows/publish-release.yml +9 -9
  6. data/.hoerc +1 -1
  7. data/.rubocop_todo.yml +1 -14
  8. data/.vscode/launch.json +32 -0
  9. data/History.md +47 -0
  10. data/Manifest.txt +13 -0
  11. data/README.rdoc +76 -30
  12. data/Rakefile +11 -11
  13. data/config/custom.jfc +1126 -0
  14. data/config/project-list-with-cpd.xml +268 -0
  15. data/config/projectlist_1_2_0.xsd +1 -1
  16. data/config/projectlist_1_3_0.xsd +53 -0
  17. data/lib/pmdtester/builders/cpd_project_hasher.rb +70 -0
  18. data/lib/pmdtester/builders/liquid_renderer.rb +111 -16
  19. data/lib/pmdtester/builders/pmd_report_builder.rb +133 -37
  20. data/lib/pmdtester/builders/project_hasher.rb +24 -25
  21. data/lib/pmdtester/builders/rule_set_builder.rb +2 -0
  22. data/lib/pmdtester/builders/summary_report_builder.rb +6 -1
  23. data/lib/pmdtester/cmd.rb +16 -7
  24. data/lib/pmdtester/cpd_report_diff.rb +99 -0
  25. data/lib/pmdtester/jfr_summary.rb +119 -0
  26. data/lib/pmdtester/location.rb +38 -0
  27. data/lib/pmdtester/parsers/cpd_report_document.rb +241 -0
  28. data/lib/pmdtester/parsers/options.rb +19 -0
  29. data/lib/pmdtester/parsers/pmd_report_document.rb +14 -1
  30. data/lib/pmdtester/parsers/projects_parser.rb +1 -1
  31. data/lib/pmdtester/pmd_branch_detail.rb +29 -9
  32. data/lib/pmdtester/pmd_report_detail.rb +54 -13
  33. data/lib/pmdtester/pmd_tester_utils.rb +45 -17
  34. data/lib/pmdtester/pmd_violation.rb +15 -6
  35. data/lib/pmdtester/project.rb +63 -3
  36. data/lib/pmdtester/report_diff.rb +5 -13
  37. data/lib/pmdtester/runner.rb +185 -37
  38. data/lib/pmdtester/system_info.rb +58 -0
  39. data/lib/pmdtester/word_differ.rb +132 -0
  40. data/lib/pmdtester.rb +8 -1
  41. data/pmdtester.gemspec +17 -17
  42. data/resources/css/pmd-tester.css +15 -0
  43. data/resources/js/project-report.js +293 -112
  44. data/resources/project_cpd_report.html +144 -0
  45. data/resources/project_diff_report.html +151 -18
  46. data/resources/project_index.html +12 -3
  47. data/resources/project_pmd_report.html +17 -2
  48. metadata +63 -43
@@ -14,8 +14,8 @@
14
14
  <script src="../js/datatables.min.js"></script>
15
15
  <script src="../js/code-snippets.js"></script>
16
16
  <!-- This is generated -->
17
- <script src="./project_data.js"></script>
18
-
17
+ <script src="./diff_pmd_data.js"></script>
18
+ <script src="./diff_cpd_data.js"></script>
19
19
  </head>
20
20
  <body>
21
21
  <div class="section">
@@ -60,28 +60,100 @@
60
60
  </td>
61
61
  </tr>
62
62
  <tr>
63
- <td class="item">Execution time</td>
64
- <td class="base">{{diff.base_execution_time}}</td>
65
- <td class="patch">{{diff.patch_execution_time}}</td>
66
- <td class="diff">{{diff.diff_execution_time}}</td>
63
+ <td class="item"><a href="#section-duplications">Duplications</a></td>
64
+ <td class="base">{{cpd_diff.duplication_counts.base_total}}</td>
65
+ <td class="patch">{{cpd_diff.duplication_counts.patch_total}}</td>
66
+ <td class="diff">
67
+ {% include 'diff_pill_row' h: cpd_diff.duplication_counts %}
68
+ </td>
67
69
  </tr>
68
70
  <tr>
69
- <td class="item">Timestamp</td>
70
- <td class="base">{{diff.base_timestamp}}</td>
71
- <td class="patch">{{diff.patch_timestamp}}</td>
72
- <td class="diff"></td>
71
+ <td class="item"><a href="#section-cpd-errors">CPD Errors</a></td>
72
+ <td class="base">{{cpd_diff.error_counts.base_total}}</td>
73
+ <td class="patch">{{cpd_diff.error_counts.patch_total}}</td>
74
+ <td class="diff">
75
+ {% include 'diff_pill_row' h: cpd_diff.error_counts %}
76
+ </td>
73
77
  </tr>
74
78
  <tr>
75
- <td class="item">Exit Code</td>
76
- <td class="base">{{diff.base_exit_code}} <a href="base_stdout.txt">stdout</a> | <a href="base_stderr.txt">stderr</a></td>
77
- <td class="patch">{{diff.patch_exit_code}} <a href="patch_stdout.txt">stdout</a> | <a href="patch_stderr.txt">stderr</a></td>
78
- <td class="diff"></td>
79
+ <td class="item">PMD Details</td>
80
+ <td class="base">
81
+ <small>
82
+ Timestamp: {{diff.base_details.timestamp}}<br>
83
+ <details><summary>Command:</summary><code>{{diff.base_details.cmdline}}</code></details><br>
84
+ Exit Code: {{diff.base_details.exit_code}}<br>
85
+ Execution Time: {{diff.base_details.execution_time}}<br>
86
+ <a href="base_pmd_stdout.txt">stdout</a> | <a href="base_pmd_stderr.txt">stderr</a>{% if diff.base_details.oom %} ⚠️ OOM occurred{% endif %}<br>
87
+ <a href="base_pmd_report.html">Base PMD Report</a><br>
88
+ <a href="base_pmd_recording.jfr">JFR Recording</a><br>
89
+ <details><summary>JFR Details</summary>
90
+ Execution Time: {{diff.base_details.jfr_summary.execution_time}}<br>
91
+ Max Heap Memory: {{diff.base_details.jfr_summary.max_heap_memory}}<br>
92
+ Max CPU Load: {{diff.base_details.jfr_summary.max_cpu_load}}<br>
93
+ Avg CPU Load: {{diff.base_details.jfr_summary.avg_cpu_load}}<br>
94
+ </details>
95
+ </small>
96
+ </td>
97
+ <td class="patch">
98
+ <small>
99
+ Timestamp: {{diff.patch_details.timestamp}}<br>
100
+ <details><summary>Command:</summary><code>{{diff.patch_details.cmdline}}</code></details><br>
101
+ Exit Code: {{diff.patch_details.exit_code}}<br>
102
+ Execution Time: {{diff.patch_details.execution_time}}<br>
103
+ <a href="patch_pmd_stdout.txt">stdout</a> | <a href="patch_pmd_stderr.txt">stderr</a>{% if diff.patch_details.oom %} ⚠️ OOM occurred{% endif %}<br>
104
+ <a href="patch_pmd_report.html">Patch PMD Report</a><br>
105
+ <a href="patch_pmd_recording.jfr">JFR Recording</a><br>
106
+ <details><summary>JFR Details</summary>
107
+ Execution Time: {{diff.patch_details.jfr_summary.execution_time}}<br>
108
+ Max Heap Memory: {{diff.patch_details.jfr_summary.max_heap_memory}}<br>
109
+ Max CPU Load: {{diff.patch_details.jfr_summary.max_cpu_load}}<br>
110
+ Avg CPU Load: {{diff.patch_details.jfr_summary.avg_cpu_load}}<br>
111
+ </details>
112
+ </small>
113
+ </td>
114
+ <td class="diff">
115
+ <small>Execution Time: {{diff.diff_execution_time}}</small>
116
+ </td>
79
117
  </tr>
80
118
  <tr>
81
- <td class="item">Full Report</td>
82
- <td class="base"><a href="base_pmd_report.html">Base PMD Report</a></td>
83
- <td class="patch"><a href="patch_pmd_report.html">Patch PMD Report</a></td>
84
- <td class="diff"></td>
119
+ <td class="item">CPD Details</td>
120
+ <td class="base">
121
+ <small>
122
+ Timestamp: {{cpd_diff.base_details.timestamp}}<br>
123
+ <details><summary>Command:</summary><code>{{cpd_diff.base_details.cmdline}}</code></details><br>
124
+ Exit Code: {{cpd_diff.base_details.exit_code}}<br>
125
+ Execution Time: {{cpd_diff.base_details.execution_time}}<br>
126
+ <a href="base_cpd_stdout.txt">stdout</a> | <a href="base_cpd_stderr.txt">stderr</a>{% if cpd_diff.base_details.oom %} ⚠️ OOM occurred{% endif %}<br>
127
+ <a href="base_cpd_report.html">Base CPD Report</a><br>
128
+ <a href="base_cpd_recording.jfr">JFR Recording</a><br>
129
+ <details><summary>JFR Details</summary>
130
+ Execution Time: {{cpd_diff.base_details.jfr_summary.execution_time}}<br>
131
+ Max Heap Memory: {{cpd_diff.base_details.jfr_summary.max_heap_memory}}<br>
132
+ Max CPU Load: {{cpd_diff.base_details.jfr_summary.max_cpu_load}}<br>
133
+ Avg CPU Load: {{cpd_diff.base_details.jfr_summary.avg_cpu_load}}<br>
134
+ </details>
135
+ </small>
136
+ </td>
137
+ <td class="patch">
138
+ <small>
139
+ Timestamp: {{cpd_diff.patch_details.timestamp}}<br>
140
+ <details><summary>Command:</summary><code>{{cpd_diff.patch_details.cmdline}}</code></details><br>
141
+ Exit Code: {{cpd_diff.patch_details.exit_code}}<br>
142
+ Execution Time: {{cpd_diff.patch_details.execution_time}}<br>
143
+ <a href="patch_cpd_stdout.txt">stdout</a> | <a href="patch_cpd_stderr.txt">stderr</a>{% if cpd_diff.patch_details.oom %} ⚠️ OOM occurred{% endif %}<br>
144
+ <a href="patch_cpd_report.html">Patch CPD Report</a><br>
145
+ <a href="patch_cpd_recording.jfr">JFR Recording</a><br>
146
+ <details><summary>JFR Details</summary>
147
+ Execution Time: {{cpd_diff.patch_details.jfr_summary.execution_time}}<br>
148
+ Max Heap Memory: {{cpd_diff.patch_details.jfr_summary.max_heap_memory}}<br>
149
+ Max CPU Load: {{cpd_diff.patch_details.jfr_summary.max_cpu_load}}<br>
150
+ Avg CPU Load: {{cpd_diff.patch_details.jfr_summary.avg_cpu_load}}<br>
151
+ </details>
152
+ </small>
153
+ </td>
154
+ <td class="diff">
155
+ <small>Execution Time: {{cpd_diff.diff_execution_time}}</small>
156
+ </td>
85
157
  </tr>
86
158
  </tbody>
87
159
  </table>
@@ -214,6 +286,67 @@
214
286
  </div>
215
287
  </div>
216
288
 
289
+ <div class="section" id="section-duplications">
290
+
291
+ <h2>Duplications</h2>
292
+
293
+ <div class="section-content">
294
+
295
+ <table id="duplicationsTable" width="100%" class="table">
296
+ <thead>
297
+ <tr>
298
+ <th>Location (click row to expand)</th>
299
+ <th>Lines</th>
300
+ <th>Tokens</th>
301
+ <th>Code Fragment</th>
302
+ <th>Type</th>
303
+ </tr>
304
+ </thead>
305
+ </table>
306
+
307
+ </div>
308
+
309
+ </div>
310
+
311
+ <div class="section" id="section-cpd-errors">
312
+
313
+ <h2>CPD Errors</h2>
314
+
315
+ <div class="section-content">
316
+
317
+ <div class="table-responsive">
318
+ <table id="cpd-error-table" class="table">
319
+ <thead>
320
+ <tr>
321
+ <th>File</th>
322
+ <th>Description (click to expand)</th>
323
+ </tr>
324
+ </thead>
325
+ <tbody>
326
+ {% for error in cpd_error_diffs %}
327
+ <tr id="cpd-error-{{forloop.index}}" class="{{error.change_type}}" data-bs-toggle="collapse" data-bs-target="#cpd-error-{{forloop.index}}-expanded">
328
+ <td><a href="{{error.file_url}}" target="_blank" rel="noopener noreferrer">{{error.short_filename}}</a></td>
329
+ <td>{{error.short_message | escape | replace: error.filename, "<span class='meta-var'>$FILE</span>" }}</td>
330
+ </tr>
331
+ <tr>
332
+ <td class="row-hidden" colspan="2">
333
+ <div class="accordion-body collapse" id="cpd-error-{{forloop.index}}-expanded">
334
+ <div class="collapsed-content-padder">
335
+ <pre>
336
+ {{ error.stack_trace_html }}
337
+ </pre>
338
+ </div>
339
+ </div>
340
+ </td>
341
+ </tr>
342
+ {% endfor %}
343
+ </tbody>
344
+ </table>
345
+ </div>
346
+
347
+ </div>
348
+ </div>
349
+
217
350
  <script src="../js/project-report.js"></script>
218
351
 
219
352
  </body>
@@ -58,6 +58,11 @@
58
58
  <td class="base">{{base.jdk_info | escape }}</td>
59
59
  <td class="patch">{{patch.jdk_info | escape }}</td>
60
60
  </tr>
61
+ <tr>
62
+ <td class="item">System Info</td>
63
+ <td class="base">{{base.cpu_info | escape}}<br>Memory: {{base.physical_memory | escape }}<br>OS: {{base.os_info | escape }}</td>
64
+ <td class="patch">{{patch.cpu_info | escape}}<br>Memory: {{patch.physical_memory | escape }}<br>OS: {{patch.os_info | escape }}</td>
65
+ </tr>
61
66
  <tr>
62
67
  <td class="item">Locale</td>
63
68
  <td class="base">{{base.locale | escape }}</td>
@@ -89,6 +94,8 @@
89
94
  <th>Violation diff</th>
90
95
  <th>Error diff</th>
91
96
  <th>ConfigError diff</th>
97
+ <th>Duplication diff</th>
98
+ <th>CPD Error diff</th>
92
99
  </tr>
93
100
  </thead>
94
101
  <tbody>
@@ -99,9 +106,11 @@
99
106
  <tr>
100
107
  <td class="project-header"><a href="{{ project.report_url }}">{{ project.name }}</a></td>
101
108
  <td>{{ project.tag }}</td>
102
- <td>{% include 'diff_pill_row' h: project.violation_counts %}</td>
103
- <td>{% include 'diff_pill_row' h: project.error_counts %}</td>
104
- <td>{% include 'diff_pill_row' h: project.configerror_counts %}</td>
109
+ <td>{% include 'diff_pill_row' h: project.pmd_report.violation_counts %}</td>
110
+ <td>{% include 'diff_pill_row' h: project.pmd_report.error_counts %}</td>
111
+ <td>{% include 'diff_pill_row' h: project.pmd_report.configerror_counts %}</td>
112
+ <td>{% include 'diff_pill_row' h: project.cpd_report.duplication_counts %}</td>
113
+ <td>{% include 'diff_pill_row' h: project.cpd_report.error_counts %}</td>
105
114
  </tr>
106
115
  {% endfor %}
107
116
  </tbody>
@@ -14,7 +14,7 @@
14
14
  <script src="../js/datatables.min.js"></script>
15
15
  <script src="../js/code-snippets.js"></script>
16
16
  <!-- This is generated -->
17
- <script src="./{{branch}}_data.js"></script>
17
+ <script src="./{{branch}}_pmd_data.js"></script>
18
18
 
19
19
  </head>
20
20
  <body>
@@ -55,12 +55,27 @@
55
55
  </tr>
56
56
  <tr>
57
57
  <td class="item">Exit Code</td>
58
- <td class="{{branch}}">{{report.exit_code}} <a href="{{branch}}_stdout.txt">stdout</a> | <a href="{{branch}}_stderr.txt">stderr</a></td>
58
+ <td class="{{branch}}">{{report.exit_code}} <a href="{{branch}}_pmd_stdout.txt">stdout</a> | <a href="{{branch}}_pmd_stderr.txt">stderr</a></td>
59
59
  </tr>
60
60
  <tr>
61
61
  <td class="item">Full Report</td>
62
62
  <td class="{{branch}}"><a href="{{branch}}_pmd_report.xml">{{branch}}_pmd_report.xml</a></td>
63
63
  </tr>
64
+ <tr>
65
+ <td class="item">JFR Recording</td>
66
+ <td class="{{branch}}"><a href="{{branch}}_pmd_recording.jfr">{{branch}}_pmd_recording.jfr</a></td>
67
+ </tr>
68
+ <tr>
69
+ <td class="item">JFR Details</td>
70
+ <td class="{{branch}}">
71
+ <details><summary>Details</summary>
72
+ Execution Time: {{report.jfr_summary.execution_time}}<br>
73
+ Max Heap Memory: {{report.jfr_summary.max_heap_memory}}<br>
74
+ Max CPU Load: {{report.jfr_summary.max_cpu_load}}<br>
75
+ Avg CPU Load: {{report.jfr_summary.avg_cpu_load}}<br>
76
+ </details>
77
+ </td>
78
+ </tr>
64
79
  </tbody>
65
80
  </table>
66
81
  </div>
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pmdtester
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Dangel
8
8
  - Binguo Bao
9
9
  - Clément Fournier
10
- autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
12
  date: 1980-01-02 00:00:00.000000000 Z
@@ -18,14 +17,14 @@ dependencies:
18
17
  requirements:
19
18
  - - "~>"
20
19
  - !ruby/object:Gem::Version
21
- version: '1.18'
20
+ version: '1.19'
22
21
  type: :runtime
23
22
  prerelease: false
24
23
  version_requirements: !ruby/object:Gem::Requirement
25
24
  requirements:
26
25
  - - "~>"
27
26
  - !ruby/object:Gem::Version
28
- version: '1.18'
27
+ version: '1.19'
29
28
  - !ruby/object:Gem::Dependency
30
29
  name: slop
31
30
  requirement: !ruby/object:Gem::Requirement
@@ -40,20 +39,6 @@ dependencies:
40
39
  - - "~>"
41
40
  - !ruby/object:Gem::Version
42
41
  version: '4.10'
43
- - !ruby/object:Gem::Dependency
44
- name: differ
45
- requirement: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '0.1'
50
- type: :runtime
51
- prerelease: false
52
- version_requirements: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - "~>"
55
- - !ruby/object:Gem::Version
56
- version: '0.1'
57
42
  - !ruby/object:Gem::Dependency
58
43
  name: rufus-scheduler
59
44
  requirement: !ruby/object:Gem::Requirement
@@ -74,28 +59,28 @@ dependencies:
74
59
  requirements:
75
60
  - - "~>"
76
61
  - !ruby/object:Gem::Version
77
- version: '1.0'
62
+ version: '1.1'
78
63
  type: :runtime
79
64
  prerelease: false
80
65
  version_requirements: !ruby/object:Gem::Requirement
81
66
  requirements:
82
67
  - - "~>"
83
68
  - !ruby/object:Gem::Version
84
- version: '1.0'
69
+ version: '1.1'
85
70
  - !ruby/object:Gem::Dependency
86
71
  name: liquid
87
72
  requirement: !ruby/object:Gem::Requirement
88
73
  requirements:
89
74
  - - "~>"
90
75
  - !ruby/object:Gem::Version
91
- version: '5.8'
76
+ version: '5.11'
92
77
  type: :runtime
93
78
  prerelease: false
94
79
  version_requirements: !ruby/object:Gem::Requirement
95
80
  requirements:
96
81
  - - "~>"
97
82
  - !ruby/object:Gem::Version
98
- version: '5.8'
83
+ version: '5.11'
99
84
  - !ruby/object:Gem::Dependency
100
85
  name: base64
101
86
  requirement: !ruby/object:Gem::Requirement
@@ -116,14 +101,14 @@ dependencies:
116
101
  requirements:
117
102
  - - "~>"
118
103
  - !ruby/object:Gem::Version
119
- version: '3.2'
104
+ version: '4.0'
120
105
  type: :runtime
121
106
  prerelease: false
122
107
  version_requirements: !ruby/object:Gem::Requirement
123
108
  requirements:
124
109
  - - "~>"
125
110
  - !ruby/object:Gem::Version
126
- version: '3.2'
111
+ version: '4.0'
127
112
  - !ruby/object:Gem::Dependency
128
113
  name: logger
129
114
  requirement: !ruby/object:Gem::Requirement
@@ -172,42 +157,42 @@ dependencies:
172
157
  requirements:
173
158
  - - "~>"
174
159
  - !ruby/object:Gem::Version
175
- version: '5.25'
160
+ version: '6.0'
176
161
  type: :development
177
162
  prerelease: false
178
163
  version_requirements: !ruby/object:Gem::Requirement
179
164
  requirements:
180
165
  - - "~>"
181
166
  - !ruby/object:Gem::Version
182
- version: '5.25'
167
+ version: '6.0'
183
168
  - !ruby/object:Gem::Dependency
184
169
  name: mocha
185
170
  requirement: !ruby/object:Gem::Requirement
186
171
  requirements:
187
172
  - - "~>"
188
173
  - !ruby/object:Gem::Version
189
- version: '2.7'
174
+ version: '3.0'
190
175
  type: :development
191
176
  prerelease: false
192
177
  version_requirements: !ruby/object:Gem::Requirement
193
178
  requirements:
194
179
  - - "~>"
195
180
  - !ruby/object:Gem::Version
196
- version: '2.7'
181
+ version: '3.0'
197
182
  - !ruby/object:Gem::Dependency
198
183
  name: rubocop
199
184
  requirement: !ruby/object:Gem::Requirement
200
185
  requirements:
201
186
  - - "~>"
202
187
  - !ruby/object:Gem::Version
203
- version: '1.79'
188
+ version: '1.84'
204
189
  type: :development
205
190
  prerelease: false
206
191
  version_requirements: !ruby/object:Gem::Requirement
207
192
  requirements:
208
193
  - - "~>"
209
194
  - !ruby/object:Gem::Version
210
- version: '1.79'
195
+ version: '1.84'
211
196
  - !ruby/object:Gem::Dependency
212
197
  name: test-unit
213
198
  requirement: !ruby/object:Gem::Requirement
@@ -228,14 +213,14 @@ dependencies:
228
213
  requirements:
229
214
  - - "~>"
230
215
  - !ruby/object:Gem::Version
231
- version: '6.12'
216
+ version: '7.2'
232
217
  type: :development
233
218
  prerelease: false
234
219
  version_requirements: !ruby/object:Gem::Requirement
235
220
  requirements:
236
221
  - - "~>"
237
222
  - !ruby/object:Gem::Version
238
- version: '6.12'
223
+ version: '7.2'
239
224
  - !ruby/object:Gem::Dependency
240
225
  name: rake
241
226
  requirement: !ruby/object:Gem::Requirement
@@ -256,17 +241,41 @@ dependencies:
256
241
  requirements:
257
242
  - - "~>"
258
243
  - !ruby/object:Gem::Version
259
- version: '4.2'
244
+ version: '4.6'
245
+ type: :development
246
+ prerelease: false
247
+ version_requirements: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - "~>"
250
+ - !ruby/object:Gem::Version
251
+ version: '4.6'
252
+ - !ruby/object:Gem::Dependency
253
+ name: debug
254
+ requirement: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - "~>"
257
+ - !ruby/object:Gem::Version
258
+ version: '1.11'
260
259
  type: :development
261
260
  prerelease: false
262
261
  version_requirements: !ruby/object:Gem::Requirement
263
262
  requirements:
264
263
  - - "~>"
265
264
  - !ruby/object:Gem::Version
266
- version: '4.2'
267
- description: A regression testing tool ensure that new problems and unexpected behaviors
268
- will not be introduced to PMD project after fixing an issue , and new rules can
269
- work as expected.
265
+ version: '1.11'
266
+ description: |-
267
+ A regression testing tool ensure that new problems and unexpected behaviors will not be introduced to PMD project after fixing an issue
268
+ and new rules work as expected.
269
+
270
+ == Features/Problems:
271
+
272
+ The diff report can be generated according to the base and patch branch of PMD
273
+ on a list of standard projects (e.g. Spring Framework, Checkstyle, OpenJDK, etc.).
274
+
275
+ Rule violations and code duplications are compared to report, which are new, removed or changed.
276
+
277
+ While executing PMD, JDK Flight Recorder (jfr) is enabled and a recording is created. This allows to investigate
278
+ performance and memory issues afterwards.
270
279
  email:
271
280
  - andreas.dangel@pmd-code.org
272
281
  - djydewang@gmail.com
@@ -280,6 +289,7 @@ extra_rdoc_files:
280
289
  - README.rdoc
281
290
  - resources/js/README.md
282
291
  files:
292
+ - ".github/dependabot.yml"
283
293
  - ".github/workflows/build-pr.yml"
284
294
  - ".github/workflows/build-release.yml"
285
295
  - ".github/workflows/build-snapshot.yml"
@@ -290,6 +300,7 @@ files:
290
300
  - ".hoerc"
291
301
  - ".rubocop.yml"
292
302
  - ".rubocop_todo.yml"
303
+ - ".vscode/launch.json"
293
304
  - Gemfile
294
305
  - History.md
295
306
  - LICENSE
@@ -298,12 +309,16 @@ files:
298
309
  - Rakefile
299
310
  - bin/pmdtester
300
311
  - config/all-java.xml
312
+ - config/custom.jfc
301
313
  - config/design.xml
314
+ - config/project-list-with-cpd.xml
302
315
  - config/project-list.xml
303
316
  - config/projectlist_1_0_0.xsd
304
317
  - config/projectlist_1_1_0.xsd
305
318
  - config/projectlist_1_2_0.xsd
319
+ - config/projectlist_1_3_0.xsd
306
320
  - lib/pmdtester.rb
321
+ - lib/pmdtester/builders/cpd_project_hasher.rb
307
322
  - lib/pmdtester/builders/liquid_renderer.rb
308
323
  - lib/pmdtester/builders/pmd_report_builder.rb
309
324
  - lib/pmdtester/builders/project_builder.rb
@@ -313,6 +328,10 @@ files:
313
328
  - lib/pmdtester/builders/summary_report_builder.rb
314
329
  - lib/pmdtester/cmd.rb
315
330
  - lib/pmdtester/collection_by_file.rb
331
+ - lib/pmdtester/cpd_report_diff.rb
332
+ - lib/pmdtester/jfr_summary.rb
333
+ - lib/pmdtester/location.rb
334
+ - lib/pmdtester/parsers/cpd_report_document.rb
316
335
  - lib/pmdtester/parsers/options.rb
317
336
  - lib/pmdtester/parsers/pmd_report_document.rb
318
337
  - lib/pmdtester/parsers/projects_parser.rb
@@ -327,6 +346,8 @@ files:
327
346
  - lib/pmdtester/resource_locator.rb
328
347
  - lib/pmdtester/runner.rb
329
348
  - lib/pmdtester/semver.rb
349
+ - lib/pmdtester/system_info.rb
350
+ - lib/pmdtester/word_differ.rb
330
351
  - pmdtester.gemspec
331
352
  - resources/_includes/diff_pill_row.html
332
353
  - resources/css/bootstrap-5.3.0-alpha3.min.css
@@ -340,6 +361,7 @@ files:
340
361
  - resources/js/popper-2.11.7.min.js
341
362
  - resources/js/project-report.js
342
363
  - resources/maven-settings.xml
364
+ - resources/project_cpd_report.html
343
365
  - resources/project_diff_report.html
344
366
  - resources/project_index.html
345
367
  - resources/project_pmd_report.html
@@ -350,7 +372,6 @@ metadata:
350
372
  bug_tracker_uri: https://github.com/pmd/pmd-regression-tester/issues
351
373
  homepage_uri: https://pmd.github.io
352
374
  source_code_uri: https://github.com/pmd/pmd-regression-tester
353
- post_install_message:
354
375
  rdoc_options:
355
376
  - "--main"
356
377
  - README.rdoc
@@ -360,17 +381,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
360
381
  requirements:
361
382
  - - ">="
362
383
  - !ruby/object:Gem::Version
363
- version: '3.3'
384
+ version: '4'
364
385
  required_rubygems_version: !ruby/object:Gem::Requirement
365
386
  requirements:
366
387
  - - ">="
367
388
  - !ruby/object:Gem::Version
368
389
  version: '0'
369
390
  requirements: []
370
- rubygems_version: 3.5.22
371
- signing_key:
391
+ rubygems_version: 4.0.6
372
392
  specification_version: 4
373
393
  summary: A regression testing tool ensure that new problems and unexpected behaviors
374
- will not be introduced to PMD project after fixing an issue , and new rules can
375
- work as expected.
394
+ will not be introduced to PMD project after fixing an issue and new rules work as
395
+ expected
376
396
  test_files: []