pmdtester 1.0.0.pre.beta2 → 1.1.1

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/build.sh +67 -0
  3. data/.ci/files/env.gpg +1 -0
  4. data/.ci/inc/install-openjdk.inc +26 -0
  5. data/.ci/manual-integration-tests.sh +20 -0
  6. data/.github/workflows/build.yml +39 -0
  7. data/.github/workflows/manual-integration-tests.yml +32 -0
  8. data/.gitignore +9 -0
  9. data/.hoerc +1 -0
  10. data/.rubocop.yml +21 -2
  11. data/.rubocop_todo.yml +7 -8
  12. data/.ruby-version +1 -0
  13. data/Gemfile +1 -13
  14. data/History.md +108 -0
  15. data/Manifest.txt +60 -0
  16. data/README.rdoc +130 -7
  17. data/Rakefile +31 -17
  18. data/bin/pmdtester +1 -1
  19. data/config/all-java.xml +1 -1
  20. data/config/design.xml +1 -1
  21. data/config/projectlist_1_0_0.xsd +2 -1
  22. data/config/projectlist_1_1_0.xsd +31 -0
  23. data/lib/pmdtester.rb +48 -0
  24. data/lib/pmdtester/builders/liquid_renderer.rb +73 -0
  25. data/lib/pmdtester/builders/pmd_report_builder.rb +133 -64
  26. data/lib/pmdtester/builders/project_builder.rb +100 -0
  27. data/lib/pmdtester/builders/project_hasher.rb +126 -0
  28. data/lib/pmdtester/builders/rule_set_builder.rb +95 -51
  29. data/lib/pmdtester/builders/simple_progress_logger.rb +27 -0
  30. data/lib/pmdtester/builders/summary_report_builder.rb +62 -120
  31. data/lib/pmdtester/cmd.rb +15 -1
  32. data/lib/pmdtester/collection_by_file.rb +55 -0
  33. data/lib/pmdtester/parsers/options.rb +33 -10
  34. data/lib/pmdtester/parsers/pmd_report_document.rb +79 -29
  35. data/lib/pmdtester/parsers/projects_parser.rb +2 -6
  36. data/lib/pmdtester/pmd_branch_detail.rb +36 -13
  37. data/lib/pmdtester/pmd_configerror.rb +62 -0
  38. data/lib/pmdtester/pmd_error.rb +34 -34
  39. data/lib/pmdtester/pmd_report_detail.rb +10 -13
  40. data/lib/pmdtester/pmd_tester_utils.rb +57 -0
  41. data/lib/pmdtester/pmd_violation.rb +66 -26
  42. data/lib/pmdtester/project.rb +28 -25
  43. data/lib/pmdtester/report_diff.rb +194 -70
  44. data/lib/pmdtester/resource_locator.rb +4 -0
  45. data/lib/pmdtester/runner.rb +82 -57
  46. data/pmdtester.gemspec +64 -0
  47. data/resources/_includes/diff_pill_row.html +6 -0
  48. data/resources/css/bootstrap.min.css +7 -0
  49. data/resources/css/datatables.min.css +36 -0
  50. data/resources/css/pmd-tester.css +131 -0
  51. data/resources/js/bootstrap.min.js +7 -0
  52. data/resources/js/code-snippets.js +66 -0
  53. data/resources/js/datatables.min.js +726 -0
  54. data/resources/js/jquery-3.2.1.slim.min.js +4 -0
  55. data/resources/js/jquery.min.js +2 -0
  56. data/resources/js/popper.min.js +5 -0
  57. data/resources/js/project-report.js +136 -0
  58. data/resources/project_diff_report.html +205 -0
  59. data/resources/project_index.html +102 -0
  60. metadata +117 -44
  61. data/.travis.yml +0 -22
  62. data/lib/pmdtester/builders/diff_builder.rb +0 -35
  63. data/lib/pmdtester/builders/diff_report_builder.rb +0 -226
  64. data/lib/pmdtester/builders/html_report_builder.rb +0 -34
  65. data/lib/pmdtester/pmdtester.rb +0 -17
  66. data/resources/css/maven-base.css +0 -155
  67. data/resources/css/maven-theme.css +0 -171
metadata CHANGED
@@ -1,72 +1,115 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pmdtester
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.beta2
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Dangel
8
8
  - Binguo Bao
9
+ - Clément Fournier
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2018-07-18 00:00:00.000000000 Z
13
+ date: 2021-01-15 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: nokogiri
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 1.11.0.rc4
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 1.11.0.rc4
29
+ - !ruby/object:Gem::Dependency
30
+ name: slop
16
31
  requirement: !ruby/object:Gem::Requirement
17
32
  requirements:
18
33
  - - "~>"
19
34
  - !ruby/object:Gem::Version
20
- version: 1.8.2
35
+ version: '4.6'
21
36
  type: :runtime
22
37
  prerelease: false
23
38
  version_requirements: !ruby/object:Gem::Requirement
24
39
  requirements:
25
40
  - - "~>"
26
41
  - !ruby/object:Gem::Version
27
- version: 1.8.2
42
+ version: '4.6'
28
43
  - !ruby/object:Gem::Dependency
29
- name: slop
44
+ name: differ
30
45
  requirement: !ruby/object:Gem::Requirement
31
46
  requirements:
32
47
  - - "~>"
33
48
  - !ruby/object:Gem::Version
34
- version: 4.6.2
49
+ version: '0.1'
35
50
  type: :runtime
36
51
  prerelease: false
37
52
  version_requirements: !ruby/object:Gem::Requirement
38
53
  requirements:
39
54
  - - "~>"
40
55
  - !ruby/object:Gem::Version
41
- version: 4.6.2
56
+ version: '0.1'
42
57
  - !ruby/object:Gem::Dependency
43
- name: hoe-bundler
58
+ name: rufus-scheduler
44
59
  requirement: !ruby/object:Gem::Requirement
45
60
  requirements:
46
61
  - - "~>"
47
62
  - !ruby/object:Gem::Version
48
- version: '1.2'
49
- type: :development
63
+ version: '3.5'
64
+ type: :runtime
50
65
  prerelease: false
51
66
  version_requirements: !ruby/object:Gem::Requirement
52
67
  requirements:
53
68
  - - "~>"
54
69
  - !ruby/object:Gem::Version
55
- version: '1.2'
70
+ version: '3.5'
56
71
  - !ruby/object:Gem::Dependency
57
- name: hoe-gemspec
72
+ name: logger-colors
58
73
  requirement: !ruby/object:Gem::Requirement
59
74
  requirements:
60
75
  - - "~>"
61
76
  - !ruby/object:Gem::Version
62
77
  version: '1.0'
63
- type: :development
78
+ type: :runtime
64
79
  prerelease: false
65
80
  version_requirements: !ruby/object:Gem::Requirement
66
81
  requirements:
67
82
  - - "~>"
68
83
  - !ruby/object:Gem::Version
69
84
  version: '1.0'
85
+ - !ruby/object:Gem::Dependency
86
+ name: liquid
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '4.0'
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '4.0'
99
+ - !ruby/object:Gem::Dependency
100
+ name: hoe-bundler
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: '1.5'
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '1.5'
70
113
  - !ruby/object:Gem::Dependency
71
114
  name: hoe-git
72
115
  requirement: !ruby/object:Gem::Requirement
@@ -87,109 +130,120 @@ dependencies:
87
130
  requirements:
88
131
  - - "~>"
89
132
  - !ruby/object:Gem::Version
90
- version: 5.10.1
133
+ version: '5.10'
91
134
  type: :development
92
135
  prerelease: false
93
136
  version_requirements: !ruby/object:Gem::Requirement
94
137
  requirements:
95
138
  - - "~>"
96
139
  - !ruby/object:Gem::Version
97
- version: 5.10.1
140
+ version: '5.10'
98
141
  - !ruby/object:Gem::Dependency
99
142
  name: mocha
100
143
  requirement: !ruby/object:Gem::Requirement
101
144
  requirements:
102
145
  - - "~>"
103
146
  - !ruby/object:Gem::Version
104
- version: 1.5.0
147
+ version: '1.5'
105
148
  type: :development
106
149
  prerelease: false
107
150
  version_requirements: !ruby/object:Gem::Requirement
108
151
  requirements:
109
152
  - - "~>"
110
153
  - !ruby/object:Gem::Version
111
- version: 1.5.0
154
+ version: '1.5'
112
155
  - !ruby/object:Gem::Dependency
113
156
  name: rubocop
114
157
  requirement: !ruby/object:Gem::Requirement
115
158
  requirements:
116
159
  - - "~>"
117
160
  - !ruby/object:Gem::Version
118
- version: 0.56.0
161
+ version: '0.81'
119
162
  type: :development
120
163
  prerelease: false
121
164
  version_requirements: !ruby/object:Gem::Requirement
122
165
  requirements:
123
166
  - - "~>"
124
167
  - !ruby/object:Gem::Version
125
- version: 0.56.0
168
+ version: '0.81'
126
169
  - !ruby/object:Gem::Dependency
127
170
  name: test-unit
128
171
  requirement: !ruby/object:Gem::Requirement
129
172
  requirements:
130
173
  - - "~>"
131
174
  - !ruby/object:Gem::Version
132
- version: 3.2.3
175
+ version: '3.2'
133
176
  type: :development
134
177
  prerelease: false
135
178
  version_requirements: !ruby/object:Gem::Requirement
136
179
  requirements:
137
180
  - - "~>"
138
181
  - !ruby/object:Gem::Version
139
- version: 3.2.3
182
+ version: '3.2'
140
183
  - !ruby/object:Gem::Dependency
141
184
  name: rdoc
142
185
  requirement: !ruby/object:Gem::Requirement
143
186
  requirements:
144
- - - "<"
145
- - !ruby/object:Gem::Version
146
- version: '6'
147
187
  - - ">="
148
188
  - !ruby/object:Gem::Version
149
189
  version: '4.0'
190
+ - - "<"
191
+ - !ruby/object:Gem::Version
192
+ version: '7'
150
193
  type: :development
151
194
  prerelease: false
152
195
  version_requirements: !ruby/object:Gem::Requirement
153
196
  requirements:
154
- - - "<"
155
- - !ruby/object:Gem::Version
156
- version: '6'
157
197
  - - ">="
158
198
  - !ruby/object:Gem::Version
159
199
  version: '4.0'
200
+ - - "<"
201
+ - !ruby/object:Gem::Version
202
+ version: '7'
160
203
  - !ruby/object:Gem::Dependency
161
204
  name: hoe
162
205
  requirement: !ruby/object:Gem::Requirement
163
206
  requirements:
164
207
  - - "~>"
165
208
  - !ruby/object:Gem::Version
166
- version: '3.17'
209
+ version: '3.22'
167
210
  type: :development
168
211
  prerelease: false
169
212
  version_requirements: !ruby/object:Gem::Requirement
170
213
  requirements:
171
214
  - - "~>"
172
215
  - !ruby/object:Gem::Version
173
- version: '3.17'
216
+ version: '3.22'
174
217
  description: A regression testing tool ensure that new problems and unexpected behaviors
175
218
  will not be introduced to PMD project after fixing an issue , and new rules can
176
219
  work as expected.
177
220
  email:
178
- - andreas.dangel@adangel.org
221
+ - andreas.dangel@pmd-code.org
179
222
  - djydewang@gmail.com
223
+ - clement.fournier76@gmail.com
180
224
  executables:
181
225
  - pmdtester
182
226
  extensions: []
183
227
  extra_rdoc_files:
184
228
  - History.md
229
+ - Manifest.txt
185
230
  - README.rdoc
186
231
  files:
232
+ - ".ci/build.sh"
233
+ - ".ci/files/env.gpg"
234
+ - ".ci/inc/install-openjdk.inc"
235
+ - ".ci/manual-integration-tests.sh"
236
+ - ".github/workflows/build.yml"
237
+ - ".github/workflows/manual-integration-tests.yml"
238
+ - ".gitignore"
239
+ - ".hoerc"
187
240
  - ".rubocop.yml"
188
241
  - ".rubocop_todo.yml"
189
- - ".travis.yml"
242
+ - ".ruby-version"
190
243
  - Gemfile
191
244
  - History.md
192
245
  - LICENSE
246
+ - Manifest.txt
193
247
  - README.rdoc
194
248
  - Rakefile
195
249
  - bin/pmdtester
@@ -197,31 +251,51 @@ files:
197
251
  - config/design.xml
198
252
  - config/project-list.xml
199
253
  - config/projectlist_1_0_0.xsd
200
- - lib/pmdtester/builders/diff_builder.rb
201
- - lib/pmdtester/builders/diff_report_builder.rb
202
- - lib/pmdtester/builders/html_report_builder.rb
254
+ - config/projectlist_1_1_0.xsd
255
+ - lib/pmdtester.rb
256
+ - lib/pmdtester/builders/liquid_renderer.rb
203
257
  - lib/pmdtester/builders/pmd_report_builder.rb
258
+ - lib/pmdtester/builders/project_builder.rb
259
+ - lib/pmdtester/builders/project_hasher.rb
204
260
  - lib/pmdtester/builders/rule_set_builder.rb
261
+ - lib/pmdtester/builders/simple_progress_logger.rb
205
262
  - lib/pmdtester/builders/summary_report_builder.rb
206
263
  - lib/pmdtester/cmd.rb
264
+ - lib/pmdtester/collection_by_file.rb
207
265
  - lib/pmdtester/parsers/options.rb
208
266
  - lib/pmdtester/parsers/pmd_report_document.rb
209
267
  - lib/pmdtester/parsers/projects_parser.rb
210
268
  - lib/pmdtester/pmd_branch_detail.rb
269
+ - lib/pmdtester/pmd_configerror.rb
211
270
  - lib/pmdtester/pmd_error.rb
212
271
  - lib/pmdtester/pmd_report_detail.rb
272
+ - lib/pmdtester/pmd_tester_utils.rb
213
273
  - lib/pmdtester/pmd_violation.rb
214
- - lib/pmdtester/pmdtester.rb
215
274
  - lib/pmdtester/project.rb
216
275
  - lib/pmdtester/report_diff.rb
217
276
  - lib/pmdtester/resource_locator.rb
218
277
  - lib/pmdtester/runner.rb
219
- - resources/css/maven-base.css
220
- - resources/css/maven-theme.css
221
- homepage: https://github.com/pmd/pmd-regression-tester
278
+ - pmdtester.gemspec
279
+ - resources/_includes/diff_pill_row.html
280
+ - resources/css/bootstrap.min.css
281
+ - resources/css/datatables.min.css
282
+ - resources/css/pmd-tester.css
283
+ - resources/js/bootstrap.min.js
284
+ - resources/js/code-snippets.js
285
+ - resources/js/datatables.min.js
286
+ - resources/js/jquery-3.2.1.slim.min.js
287
+ - resources/js/jquery.min.js
288
+ - resources/js/popper.min.js
289
+ - resources/js/project-report.js
290
+ - resources/project_diff_report.html
291
+ - resources/project_index.html
292
+ homepage: https://pmd.github.io
222
293
  licenses:
223
294
  - BSD-2-Clause
224
- metadata: {}
295
+ metadata:
296
+ bug_tracker_uri: https://github.com/pmd/pmd-regression-tester/issues
297
+ homepage_uri: https://pmd.github.io
298
+ source_code_uri: https://github.com/pmd/pmd-regression-tester
225
299
  post_install_message:
226
300
  rdoc_options:
227
301
  - "--main"
@@ -232,15 +306,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
232
306
  requirements:
233
307
  - - ">="
234
308
  - !ruby/object:Gem::Version
235
- version: '0'
309
+ version: '2.7'
236
310
  required_rubygems_version: !ruby/object:Gem::Requirement
237
311
  requirements:
238
- - - ">"
312
+ - - ">="
239
313
  - !ruby/object:Gem::Version
240
- version: 1.3.1
314
+ version: '0'
241
315
  requirements: []
242
- rubyforge_project:
243
- rubygems_version: 2.7.6
316
+ rubygems_version: 3.1.4
244
317
  signing_key:
245
318
  specification_version: 4
246
319
  summary: A regression testing tool ensure that new problems and unexpected behaviors
@@ -1,22 +0,0 @@
1
- language: ruby
2
- jdk: oraclejdk9
3
- script:
4
- - rake rubocop
5
- - rake clean test
6
- - rake clean integration-test
7
- - rake install_gem
8
- - pmdtester -h
9
-
10
- before_deploy:
11
- - git stash --all
12
- - rake hoe:spec
13
-
14
- deploy:
15
- provider: rubygems
16
- api_key:
17
- secure: xcEpX/r7es6/jnvNPrVClVkKLemC+4EaFACfK9PCw05jAqf3sDX8UMKD2B4NU1JfF+I/szC5loyCe8s1wBUbFhelR8sL93RNOyVlQCKqaDTFw0DUvnbKWdgDb7POhcmo8SWi4aaKPias6wCuWA/Wc6jUvcrlAgKDsmYqOukXQoFyQbOUsnqrE/FMA7BfUIHkeeJbNk8807u4+aMqahZyzTFvuEVBUvKqCzDYPl9kpm4fzOtjxiExj1ic9dr2Dz5bcyWteMjZFSgjYWgZUXpk8FWCj5R/8VQsklxFFXFZlQIVwqtpaKgEOjwOOxaA6b8O7OeU82HtSPfxy6eCNE7pvzoYq+ZGxxk6fPbAl2mqKtPU76oRKH8YmXuEdDtdHVCYp7wOFdrLhJ6bJ3H/DSD14Kso21D3ktt4y4qkCd0Ev1a6nbY3LrO+NqFlZytwlYY1t8CUWyc9GfvpQXd7j0shSvrh2RU0+ATcQc0tRSHE2htjbiMWPi/ffMNe5h7iVqho5cLC4n187VrWOqGJf2S47spIgw9N3VWzyfAxAxI2XIvWcGoAIQhEgU6bH14Mz+0amG6ggzCBAbDPEC1j8cuwVkmanWCWZWi6EuRbCYZ7rgCFIx3hZS9NPBANfcXudm7eINvuMlFnmwrVzmtTIEZTy56ZfaWPzGxotyn5M9DdT1U=
18
- on:
19
- tags: true
20
- skip_cleanup: true
21
- gem: pmdtester
22
- gemspec: pmdtester.gemspec
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'nokogiri'
4
- require_relative '../pmd_error'
5
- require_relative '../pmd_violation'
6
- require_relative '../pmd_report_detail'
7
- require_relative '../parsers/pmd_report_document'
8
- require_relative '../report_diff'
9
-
10
- module PmdTester
11
- # Building difference between two pmd xml files
12
- class DiffBuilder
13
- # The schema of pmd xml report refers to
14
- # http://pmd.sourceforge.net/report_2_0_0.xsd
15
- def build(base_report_filename, patch_report_filename, base_info, patch_info, filter_set = nil)
16
- report_diffs = ReportDiff.new
17
- base_details, patch_details = report_diffs.calculate_details(base_info, patch_info)
18
- base_violations, base_errors = parse_pmd_report(base_report_filename, 'base',
19
- base_details.working_dir, filter_set)
20
- patch_violations, patch_errors = parse_pmd_report(patch_report_filename, 'patch',
21
- patch_details.working_dir)
22
- report_diffs.calculate_violations(base_violations, patch_violations)
23
- report_diffs.calculate_errors(base_errors, patch_errors)
24
-
25
- report_diffs
26
- end
27
-
28
- def parse_pmd_report(report_filename, branch, working_dir, filter_set = nil)
29
- doc = PmdReportDocument.new(branch, working_dir, filter_set)
30
- parser = Nokogiri::XML::SAX::Parser.new(doc)
31
- parser.parse_file(report_filename) unless report_filename.nil?
32
- [doc.violations, doc.errors]
33
- end
34
- end
35
- end
@@ -1,226 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'nokogiri'
4
- require_relative './html_report_builder'
5
-
6
- module PmdTester
7
- # Building diff report for a single project
8
- class DiffReportBuilder < HtmlReportBuilder
9
- include PmdTester
10
- NO_DIFFERENCES_MESSAGE = 'No differences found!'
11
-
12
- def build(project)
13
- @project = project
14
- @report_diff = project.report_diff
15
-
16
- index = File.new(project.diff_report_index_path, 'w')
17
-
18
- html_report = build_html_report('pmd xml difference report')
19
- copy_css(project.target_diff_report_path)
20
-
21
- index.puts html_report
22
- index.close
23
-
24
- logger.info "Built difference report of #{project.name} successfully!"
25
- end
26
-
27
- def build_body(doc)
28
- violation_diffs = @report_diff.violation_diffs
29
- error_diffs = @report_diff.error_diffs
30
- doc.body(class: 'composite') do
31
- doc.div(id: 'contentBox') do
32
- build_summary_section(doc)
33
- build_violations_section(doc, violation_diffs)
34
- build_errors_section(doc, error_diffs)
35
- end
36
- end
37
- end
38
-
39
- def build_summary_section(doc)
40
- doc.div(class: 'section', id: 'Summary') do
41
- doc.h2 'Summary:'
42
- build_summary_table(doc)
43
- end
44
- end
45
-
46
- def build_summary_table(doc)
47
- doc.table(class: 'bodyTable', border: '0') do
48
- doc.thead do
49
- doc.tr do
50
- doc.th 'Item'
51
- doc.th 'Base'
52
- doc.th 'Patch'
53
- doc.th 'Difference'
54
- end
55
- end
56
-
57
- build_summary_table_body(doc)
58
- end
59
- end
60
-
61
- def build_summary_table_body(doc)
62
- doc.tbody do
63
- build_summary_row(doc, 'number of errors', @report_diff.base_errors_size,
64
- @report_diff.patch_errors_size, @report_diff.error_diffs_size)
65
- build_summary_row(doc, 'number of violations', @report_diff.base_violations_size,
66
- @report_diff.patch_violations_size, @report_diff.violation_diffs_size)
67
- build_summary_row(doc, 'execution time', @report_diff.base_execution_time,
68
- @report_diff.patch_execution_time, @report_diff.diff_execution_time)
69
- build_summary_row(doc, 'timestamp', @report_diff.base_timestamp,
70
- @report_diff.patch_timestamp, '')
71
- end
72
- end
73
-
74
- def build_summary_row(doc, item, base, patch, diff)
75
- doc.tr do
76
- doc.td(class: 'c') { doc.text item }
77
- doc.td(class: 'a') { doc.text base }
78
- doc.td(class: 'b') { doc.text patch }
79
- doc.td(class: 'c') { doc.text diff }
80
- end
81
- end
82
-
83
- def build_filename_h3(doc, filename)
84
- doc.h3 do
85
- doc.a(href: @project.get_webview_url(filename)) do
86
- doc.text @project.get_path_inside_project(filename)
87
- end
88
- end
89
- end
90
-
91
- def build_violations_section(doc, violation_diffs)
92
- doc.div(class: 'section', id: 'Violations') do
93
- doc.h2 'Violations:'
94
-
95
- doc.h3 NO_DIFFERENCES_MESSAGE if violation_diffs.empty?
96
- violation_diffs.each do |key, value|
97
- doc.div(class: 'section') do
98
- build_filename_h3(doc, key)
99
- build_violation_table(doc, key, value)
100
- end
101
- end
102
- end
103
- end
104
-
105
- def build_violation_table(doc, key, value)
106
- doc.table(class: 'bodyTable', border: '0') do
107
- build_violation_table_head(doc)
108
- build_violation_table_body(doc, key, value)
109
- end
110
- end
111
-
112
- def build_violation_table_head(doc)
113
- doc.thead do
114
- doc.tr do
115
- doc.th
116
- doc.th 'priority'
117
- doc.th 'Rule'
118
- doc.th 'Message'
119
- doc.th 'Line'
120
- end
121
- end
122
- end
123
-
124
- def build_violation_table_body(doc, key, value)
125
- doc.tbody do
126
- a_index = 1
127
- value.each do |pmd_violation|
128
- build_violation_table_row(doc, key, pmd_violation, a_index)
129
- a_index += 1
130
- end
131
- end
132
- end
133
-
134
- def build_violation_table_row(doc, key, pmd_violation, a_index)
135
- doc.tr(class: pmd_violation.branch == 'base' ? 'a' : 'b') do
136
- # The anchor
137
- doc.td do
138
- doc.a(id: "A#{a_index}", href: "#A#{a_index}") { doc.text '#' }
139
- end
140
-
141
- violation = pmd_violation.attrs
142
-
143
- # The priority of the rule
144
- doc.td violation['priority']
145
-
146
- # The rule that trigger the violation
147
- doc.td do
148
- doc.a(href: (violation['externalInfoUrl']).to_s) { doc.text violation['rule'] }
149
- end
150
-
151
- # The violation message
152
- doc.td pmd_violation.text
153
-
154
- # The begin line of the violation
155
- line = violation['beginline']
156
-
157
- # The link to the source file
158
- doc.td do
159
- link = get_link_to_source(violation, key)
160
- doc.a(href: link.to_s) { doc.text line }
161
- end
162
- end
163
- end
164
-
165
- def get_link_to_source(violation, key)
166
- l_str = @project.type == 'git' ? 'L' : 'l'
167
- line_str = "##{l_str}#{violation['beginline']}"
168
- @project.get_webview_url(key) + line_str
169
- end
170
-
171
- def build_errors_section(doc, error_diffs)
172
- doc.div(class: 'section', id: 'Errors') do
173
- doc.h2 do
174
- doc.text 'Errors:'
175
- end
176
-
177
- doc.h3 NO_DIFFERENCES_MESSAGE if error_diffs.empty?
178
- error_diffs.each do |key, value|
179
- doc.div(class: 'section') do
180
- build_filename_h3(doc, key)
181
- build_errors_table(doc, value)
182
- end
183
- end
184
- end
185
- end
186
-
187
- def build_errors_table(doc, errors)
188
- doc.table(class: 'bodyTable', border: '0') do
189
- build_errors_table_head(doc)
190
- build_errors_table_body(doc, errors)
191
- end
192
- end
193
-
194
- def build_errors_table_head(doc)
195
- doc.thead do
196
- doc.tr do
197
- doc.th
198
- doc.th 'Message'
199
- doc.th 'Details'
200
- end
201
- end
202
- end
203
-
204
- def build_errors_table_body(doc, errors)
205
- doc.tbody do
206
- b_index = 1
207
- errors.each do |pmd_error|
208
- doc.tr(class: pmd_error.branch == 'base' ? 'a' : 'b') do
209
- # The anchor
210
- doc.td do
211
- doc.a(id: "B#{b_index}", href: "#B#{b_index}") { doc.text '#' }
212
- end
213
-
214
- # The error message
215
- doc.td pmd_error.msg
216
-
217
- # Details of error
218
- doc.td pmd_error.text
219
-
220
- b_index += 1
221
- end
222
- end
223
- end
224
- end
225
- end
226
- end