pmdtester 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/build.sh +91 -0
  3. data/.ci/files/env.gpg +1 -0
  4. data/.github/workflows/build.yml +39 -0
  5. data/.gitignore +9 -0
  6. data/.hoerc +1 -1
  7. data/.rubocop.yml +6 -2
  8. data/.ruby-version +1 -0
  9. data/History.md +40 -0
  10. data/Manifest.txt +24 -9
  11. data/README.rdoc +45 -30
  12. data/Rakefile +5 -3
  13. data/config/all-java.xml +1 -1
  14. data/config/design.xml +1 -1
  15. data/config/projectlist_1_0_0.xsd +2 -1
  16. data/config/projectlist_1_1_0.xsd +31 -0
  17. data/lib/pmdtester.rb +8 -7
  18. data/lib/pmdtester/builders/liquid_renderer.rb +73 -0
  19. data/lib/pmdtester/builders/pmd_report_builder.rb +102 -78
  20. data/lib/pmdtester/builders/project_builder.rb +100 -0
  21. data/lib/pmdtester/builders/project_hasher.rb +126 -0
  22. data/lib/pmdtester/builders/rule_set_builder.rb +92 -47
  23. data/lib/pmdtester/builders/simple_progress_logger.rb +4 -4
  24. data/lib/pmdtester/builders/summary_report_builder.rb +62 -131
  25. data/lib/pmdtester/collection_by_file.rb +55 -0
  26. data/lib/pmdtester/parsers/options.rb +19 -0
  27. data/lib/pmdtester/parsers/pmd_report_document.rb +74 -29
  28. data/lib/pmdtester/parsers/projects_parser.rb +2 -4
  29. data/lib/pmdtester/pmd_branch_detail.rb +29 -19
  30. data/lib/pmdtester/pmd_configerror.rb +23 -24
  31. data/lib/pmdtester/pmd_error.rb +34 -34
  32. data/lib/pmdtester/pmd_report_detail.rb +9 -12
  33. data/lib/pmdtester/pmd_tester_utils.rb +55 -0
  34. data/lib/pmdtester/pmd_violation.rb +66 -28
  35. data/lib/pmdtester/project.rb +21 -48
  36. data/lib/pmdtester/report_diff.rb +179 -111
  37. data/lib/pmdtester/resource_locator.rb +4 -0
  38. data/lib/pmdtester/runner.rb +66 -64
  39. data/pmdtester.gemspec +27 -36
  40. data/resources/_includes/diff_pill_row.html +6 -0
  41. data/resources/css/bootstrap.min.css +7 -0
  42. data/resources/css/datatables.min.css +36 -0
  43. data/resources/css/pmd-tester.css +131 -0
  44. data/resources/js/bootstrap.min.js +7 -0
  45. data/resources/js/code-snippets.js +66 -0
  46. data/resources/js/datatables.min.js +726 -0
  47. data/resources/js/jquery-3.2.1.slim.min.js +4 -0
  48. data/resources/js/jquery.min.js +2 -0
  49. data/resources/js/popper.min.js +5 -0
  50. data/resources/js/project-report.js +136 -0
  51. data/resources/project_diff_report.html +205 -0
  52. data/resources/project_index.html +102 -0
  53. metadata +64 -20
  54. data/.travis.yml +0 -40
  55. data/lib/pmdtester/builders/diff_builder.rb +0 -31
  56. data/lib/pmdtester/builders/diff_report/configerrors.rb +0 -50
  57. data/lib/pmdtester/builders/diff_report/errors.rb +0 -71
  58. data/lib/pmdtester/builders/diff_report/violations.rb +0 -77
  59. data/lib/pmdtester/builders/diff_report_builder.rb +0 -99
  60. data/lib/pmdtester/builders/html_report_builder.rb +0 -56
  61. data/resources/css/maven-base.css +0 -155
  62. data/resources/css/maven-theme.css +0 -171
@@ -1,99 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'nokogiri'
4
- require 'differ'
5
-
6
- module PmdTester
7
- # Building diff report for a single project
8
- class DiffReportBuilder < HtmlReportBuilder
9
- include PmdTester
10
- include DiffReportBuilderViolations
11
- include DiffReportBuilderErrors
12
- include DiffReportBuilderConfigErrors
13
-
14
- def build(project)
15
- @project = project
16
- @report_diff = project.report_diff
17
-
18
- index = File.new(project.diff_report_index_path, 'w')
19
-
20
- html_report = build_html_report('pmd xml difference report')
21
- copy_css(project.target_diff_report_path)
22
-
23
- index.puts html_report
24
- index.close
25
-
26
- logger.info "Built difference report of #{project.name} successfully!"
27
- end
28
-
29
- def build_body(doc)
30
- violation_diffs = @report_diff.violation_diffs
31
- error_diffs = @report_diff.error_diffs
32
- configerrors_diffs = @report_diff.configerrors_diffs
33
- doc.body(class: 'composite') do
34
- doc.div(id: 'contentBox') do
35
- build_summary_section(doc)
36
- build_violations_section(doc, violation_diffs)
37
- build_errors_section(doc, error_diffs)
38
- build_configerrors_section(doc, configerrors_diffs)
39
- end
40
- end
41
- end
42
-
43
- def build_summary_section(doc)
44
- doc.div(class: 'section', id: 'Summary') do
45
- doc.h2 'Summary:'
46
- build_summary_table(doc)
47
- end
48
- end
49
-
50
- def build_summary_table(doc)
51
- doc.table(class: 'bodyTable', border: '0') do
52
- build_table_head(doc, 'Item', 'Base', 'Patch', 'Difference')
53
- build_summary_table_body(doc)
54
- end
55
- end
56
-
57
- def build_summary_table_body(doc)
58
- doc.tbody do
59
- build_summary_row(doc, 'number of errors', @report_diff.base_errors_size,
60
- @report_diff.patch_errors_size, @report_diff.removed_errors_size,
61
- @report_diff.new_errors_size)
62
- build_summary_row(doc, 'number of violations', @report_diff.base_violations_size,
63
- @report_diff.patch_violations_size, @report_diff.removed_violations_size,
64
- @report_diff.new_violations_size)
65
- build_summary_row(doc, 'number of config errors', @report_diff.base_configerrors_size,
66
- @report_diff.patch_configerrors_size,
67
- @report_diff.removed_configerrors_size,
68
- @report_diff.new_configerrors_size)
69
- build_summary_row(doc, 'execution time', @report_diff.base_execution_time,
70
- @report_diff.patch_execution_time, @report_diff.diff_execution_time)
71
- build_summary_row(doc, 'timestamp', @report_diff.base_timestamp,
72
- @report_diff.patch_timestamp, '')
73
- end
74
- end
75
-
76
- def build_summary_row(doc, item, base, patch, *diff)
77
- doc.tr do
78
- doc.td(class: 'c') { doc.text item }
79
- doc.td(class: 'b') { doc.text base }
80
- doc.td(class: 'a') { doc.text patch }
81
- doc.td(class: 'c') do
82
- if diff.size == 1
83
- doc.text diff[0]
84
- else
85
- build_table_content_for(doc, diff[0], diff[1])
86
- end
87
- end
88
- end
89
- end
90
-
91
- def build_filename_h3(doc, filename)
92
- doc.h3 do
93
- doc.a(href: @project.get_webview_url(filename)) do
94
- doc.text @project.get_path_inside_project(filename)
95
- end
96
- end
97
- end
98
- end
99
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PmdTester
4
- # This class is the parent of all classes which is used to build html report
5
- class HtmlReportBuilder
6
- CSS_SRC_DIR = ResourceLocator.locate('resources/css')
7
- NO_DIFFERENCES_MESSAGE = 'No differences found!'
8
-
9
- def build_html_report(title_name)
10
- html_builder = Nokogiri::HTML::Builder.new do |doc|
11
- doc.html do
12
- build_head(doc, title_name)
13
- build_body(doc)
14
- end
15
- end
16
- html_builder.to_html
17
- end
18
-
19
- def build_head(doc, title_name)
20
- doc.head do
21
- doc.title title_name
22
-
23
- doc.style(type: 'text/css', media: 'all') do
24
- doc.text '@import url("./css/maven-base.css");@import url("./css/maven-theme.css");'
25
- end
26
- end
27
- end
28
-
29
- def build_table_head(doc, *columns)
30
- doc.thead do
31
- doc.tr do
32
- columns.each do |column|
33
- doc.th column
34
- end
35
- end
36
- end
37
- end
38
-
39
- def build_table_anchor_column(doc, prefix, index)
40
- doc.td do
41
- doc.a(id: "#{prefix}#{index}", href: "##{prefix}#{index}") { doc.text '#' }
42
- end
43
- end
44
-
45
- def copy_css(report_dir)
46
- css_dest_dir = "#{report_dir}/css"
47
- FileUtils.copy_entry(CSS_SRC_DIR, css_dest_dir)
48
- end
49
-
50
- def build_table_content_for(doc, removed_size, new_size)
51
- doc.font(color: 'red') { doc.text "-#{removed_size}" }
52
- doc.text ' | '
53
- doc.font(color: 'green') { doc.text "+#{new_size}" }
54
- end
55
- end
56
- end
@@ -1,155 +0,0 @@
1
- body {
2
- margin: 0px;
3
- padding: 0px;
4
- }
5
- img {
6
- border:none;
7
- }
8
- table {
9
- padding:0px;
10
- width: 100%;
11
- margin-left: -2px;
12
- margin-right: -2px;
13
- }
14
- acronym {
15
- cursor: help;
16
- border-bottom: 1px dotted #feb;
17
- }
18
- table.bodyTable th, table.bodyTable td {
19
- padding: 2px 4px 2px 4px;
20
- vertical-align: top;
21
- }
22
- div.clear{
23
- clear:both;
24
- visibility: hidden;
25
- }
26
- div.clear hr{
27
- display: none;
28
- }
29
- #bannerLeft, #bannerRight {
30
- font-size: xx-large;
31
- font-weight: bold;
32
- }
33
- #bannerLeft img, #bannerRight img {
34
- margin: 0px;
35
- }
36
- .xleft, #bannerLeft img {
37
- float:left;
38
- }
39
- .xright, #bannerRight {
40
- float:right;
41
- }
42
- #banner {
43
- padding: 0px;
44
- }
45
- #banner img {
46
- border: none;
47
- }
48
- #breadcrumbs {
49
- padding: 3px 10px 3px 10px;
50
- }
51
- #leftColumn {
52
- width: 170px;
53
- float:left;
54
- overflow: auto;
55
- }
56
- #bodyColumn {
57
- margin-right: 1.5em;
58
- margin-left: 197px;
59
- }
60
- #legend {
61
- padding: 8px 0 8px 0;
62
- }
63
- #navcolumn {
64
- padding: 8px 4px 0 8px;
65
- }
66
- #navcolumn h5 {
67
- margin: 0;
68
- padding: 0;
69
- font-size: small;
70
- }
71
- #navcolumn ul {
72
- margin: 0;
73
- padding: 0;
74
- font-size: small;
75
- }
76
- #navcolumn li {
77
- list-style-type: none;
78
- background-image: none;
79
- background-repeat: no-repeat;
80
- background-position: 0 0.4em;
81
- padding-left: 16px;
82
- list-style-position: outside;
83
- line-height: 1.2em;
84
- font-size: smaller;
85
- }
86
- #navcolumn li.expanded {
87
- background-image: url(../images/expanded.gif);
88
- }
89
- #navcolumn li.collapsed {
90
- background-image: url(../images/collapsed.gif);
91
- }
92
- #navcolumn li.none {
93
- text-indent: -1em;
94
- margin-left: 1em;
95
- }
96
- #poweredBy {
97
- text-align: center;
98
- }
99
- #navcolumn img {
100
- margin-top: 10px;
101
- margin-bottom: 3px;
102
- }
103
- #poweredBy img {
104
- display:block;
105
- margin: 20px 0 20px 17px;
106
- }
107
- #search img {
108
- margin: 0px;
109
- display: block;
110
- }
111
- #search #q, #search #btnG {
112
- border: 1px solid #999;
113
- margin-bottom:10px;
114
- }
115
- #search form {
116
- margin: 0px;
117
- }
118
- #lastPublished {
119
- font-size: x-small;
120
- }
121
- .navSection {
122
- margin-bottom: 2px;
123
- padding: 8px;
124
- }
125
- .navSectionHead {
126
- font-weight: bold;
127
- font-size: x-small;
128
- }
129
- .section {
130
- padding: 4px;
131
- }
132
- #footer {
133
- padding: 3px 10px 3px 10px;
134
- font-size: x-small;
135
- }
136
- #breadcrumbs {
137
- font-size: x-small;
138
- margin: 0pt;
139
- }
140
- .source {
141
- padding: 12px;
142
- margin: 1em 7px 1em 7px;
143
- }
144
- .source pre {
145
- margin: 0px;
146
- padding: 0px;
147
- }
148
- #navcolumn img.imageLink, .imageLink {
149
- padding-left: 0px;
150
- padding-bottom: 0px;
151
- padding-top: 0px;
152
- padding-right: 2px;
153
- border: 0px;
154
- margin: 0px;
155
- }
@@ -1,171 +0,0 @@
1
- body {
2
- padding: 0px 0px 10px 0px;
3
- }
4
- body, td, select, input, li{
5
- font-family: Verdana, Helvetica, Arial, sans-serif;
6
- font-size: 13px;
7
- }
8
- code{
9
- font-family: Courier, monospace;
10
- font-size: 13px;
11
- }
12
- a {
13
- text-decoration: none;
14
- }
15
- a:link {
16
- color:#36a;
17
- }
18
- a:visited {
19
- color:#47a;
20
- }
21
- a:active, a:hover {
22
- color:#69c;
23
- }
24
- #legend li.externalLink {
25
- background: url(../images/external.png) left top no-repeat;
26
- padding-left: 18px;
27
- }
28
- a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
29
- background: url(../images/external.png) right center no-repeat;
30
- padding-right: 18px;
31
- }
32
- #legend li.newWindow {
33
- background: url(../images/newwindow.png) left top no-repeat;
34
- padding-left: 18px;
35
- }
36
- a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover {
37
- background: url(../images/newwindow.png) right center no-repeat;
38
- padding-right: 18px;
39
- }
40
- h2 {
41
- padding: 4px 4px 4px 6px;
42
- border: 1px solid #999;
43
- color: #900;
44
- background-color: #ddd;
45
- font-weight:900;
46
- font-size: x-large;
47
- }
48
- h3 {
49
- padding: 4px 4px 4px 6px;
50
- border: 1px solid #aaa;
51
- color: #900;
52
- background-color: #eee;
53
- font-weight: normal;
54
- font-size: large;
55
- }
56
- h4 {
57
- font-weight: normal;
58
- font-size: large;
59
- }
60
- h5 {
61
- padding: 4px 4px 4px 6px;
62
- color: #900;
63
- font-size: normal;
64
- }
65
- p {
66
- line-height: 1.3em;
67
- font-size: small;
68
- }
69
- #breadcrumbs {
70
- border-top: 1px solid #aaa;
71
- border-bottom: 1px solid #aaa;
72
- background-color: #ccc;
73
- }
74
- #leftColumn {
75
- margin: 10px 0 0 5px;
76
- border: 1px solid #999;
77
- background-color: #eee;
78
- }
79
- #navcolumn h5 {
80
- font-size: smaller;
81
- border-bottom: 1px solid #aaaaaa;
82
- padding-top: 2px;
83
- color: #000;
84
- }
85
-
86
- table.bodyTable th {
87
- color: white;
88
- background-color: #bbb;
89
- text-align: left;
90
- font-weight: bold;
91
- }
92
-
93
- table.bodyTable th, table.bodyTable td {
94
- font-size: 1em;
95
- }
96
-
97
- table.bodyTable tr.a {
98
- background-color: #af8;
99
- }
100
-
101
- table.bodyTable tr.b {
102
- background-color: #fca;
103
- }
104
-
105
- table.bodyTable tr.c {
106
- background-color: #eee;
107
- }
108
-
109
- table.bodyTable tr.d {
110
- background-color: #fef7bc;
111
- }
112
-
113
- table.bodyTable td.a {
114
- background-color: #af8;
115
- }
116
-
117
- table.bodyTable td.b {
118
- background-color: #fca;
119
- }
120
-
121
- table.bodyTable td.c {
122
- background-color: #eee;
123
- }
124
-
125
- .source {
126
- border: 1px solid #999;
127
- }
128
- dl {
129
- padding: 4px 4px 4px 6px;
130
- border: 1px solid #aaa;
131
- background-color: #ffc;
132
- }
133
- dt {
134
- color: #900;
135
- }
136
-
137
- #banner {
138
- border-bottom: 1px solid #fff;
139
- }
140
-
141
- button {
142
- background-color: #ddd;
143
- border: none;
144
- color: #900;
145
- padding: 6px 12px;
146
- text-align: center;
147
- text-decoration: none;
148
- display: inline-block;
149
- font-size: 25px;
150
- margin: 4px 2px;
151
- cursor: pointer;
152
- }
153
-
154
- #example {
155
- position: relative;
156
- }
157
-
158
- #example-checkbox {
159
- display: none;
160
- }
161
-
162
- #example-checkbox:checked + #example:after {
163
- content: attr(data-text);
164
- position: absolute;
165
- top: 0;
166
- left: 0;
167
- right: 0;
168
- bottom: 0;
169
- background: white;
170
- }
171
-