pmdtester 1.0.0.pre.beta3 → 1.1.2

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