kolekti_radon 5.0.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.
- checksums.yaml +7 -0
- data/.gitignore +36 -0
- data/.rspec +4 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +21 -0
- data/CHANGELOG.md +37 -0
- data/COPYING +674 -0
- data/COPYING.LESSER +165 -0
- data/Gemfile +4 -0
- data/README.md +36 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/gem_tasks/cucumber.rake +10 -0
- data/kolekti_radon.gemspec +30 -0
- data/lib/kolekti/radon.rb +7 -0
- data/lib/kolekti/radon/collector.rb +96 -0
- data/lib/kolekti/radon/metrics.yml +49 -0
- data/lib/kolekti/radon/parser.rb +23 -0
- data/lib/kolekti/radon/parser/base.rb +35 -0
- data/lib/kolekti/radon/parser/cyclomatic.rb +94 -0
- data/lib/kolekti/radon/parser/maintainability.rb +15 -0
- data/lib/kolekti/radon/parser/raw.rb +15 -0
- data/lib/kolekti/radon/version.rb +5 -0
- metadata +198 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
module Kolekti
|
2
|
+
module Radon
|
3
|
+
module Parser
|
4
|
+
class Base < Kolekti::Parser
|
5
|
+
attr_reader :metric_configurations, :persistence_strategy, :logger
|
6
|
+
|
7
|
+
def initialize(metric_configurations, persistence_strategy, logger)
|
8
|
+
@metric_configurations = metric_configurations
|
9
|
+
@persistence_strategy = persistence_strategy
|
10
|
+
@logger = logger
|
11
|
+
end
|
12
|
+
|
13
|
+
def command; raise NotImplementedError; end
|
14
|
+
|
15
|
+
# Default implementation is somewhat naive, but works for both Raw and
|
16
|
+
# Maintainability Index - it just expects keys named the same as the
|
17
|
+
# code for each metric configuration.
|
18
|
+
def parse(raw_output)
|
19
|
+
raw_output.each do |file_name, result_hash|
|
20
|
+
module_name = self.class.parse_file_name(file_name)
|
21
|
+
|
22
|
+
@metric_configurations.each do |metric_configuration|
|
23
|
+
value = result_hash[metric_configuration.metric.code] unless result_hash.key?('error')
|
24
|
+
value ||= self.class.default_value
|
25
|
+
|
26
|
+
@persistence_strategy.create_tree_metric_result(
|
27
|
+
metric_configuration, module_name, value.to_f,
|
28
|
+
KalibroClient::Entities::Miscellaneous::Granularity::PACKAGE)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
module Kolekti
|
4
|
+
module Radon
|
5
|
+
module Parser
|
6
|
+
class Cyclomatic < Base
|
7
|
+
def self.default_value
|
8
|
+
1.0
|
9
|
+
end
|
10
|
+
|
11
|
+
def command
|
12
|
+
'cc'
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse(cc_output)
|
16
|
+
metric_configuration = metric_configurations.first
|
17
|
+
|
18
|
+
parse_output(cc_output) do |module_name, result, granularity|
|
19
|
+
value = result['complexity'].to_f
|
20
|
+
persistence_strategy.create_tree_metric_result(
|
21
|
+
metric_configuration, module_name, value, granularity)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# This method checks for errors found by Radon, switches the valid results between METHOD and FUNCTION
|
28
|
+
# Calls the passed block multiple times with (module_name, result, granularity)
|
29
|
+
def parse_output(cc_output, &block)
|
30
|
+
cc_output.each do |file_name, entries|
|
31
|
+
# If Radon couldn't parse the file we don't want to continue since the output is a error message
|
32
|
+
next if has_error?(file_name, entries)
|
33
|
+
|
34
|
+
file_module_name = self.class.parse_file_name(file_name)
|
35
|
+
functions = []
|
36
|
+
classes = []
|
37
|
+
|
38
|
+
entries.each do |entry|
|
39
|
+
if entry['type'] == 'class'
|
40
|
+
classes << entry
|
41
|
+
elsif entry['type'] == 'method'
|
42
|
+
# These entries are duplicated on Radon's output
|
43
|
+
next
|
44
|
+
else
|
45
|
+
functions << entry
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
parse_entries(functions, file_module_name,
|
50
|
+
KalibroClient::Entities::Miscellaneous::Granularity::FUNCTION, &block)
|
51
|
+
|
52
|
+
parse_entries(classes, file_module_name) do |class_module_name, class_entry, _|
|
53
|
+
parse_entries(class_entry['methods'], class_module_name,
|
54
|
+
KalibroClient::Entities::Miscellaneous::Granularity::METHOD, &block)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def parse_entries(entries, base_module_name, granularity=nil)
|
60
|
+
# It's possible for multiple methods to be declared with the same name,
|
61
|
+
# even though they'll never be assigned to the same slots at runtime, such
|
62
|
+
# as when declaring properties in classes.
|
63
|
+
# Radon will produce the same name in those cases, so deal with them by
|
64
|
+
# appending the line number to any methods with the same module name
|
65
|
+
entries.group_by { |entry| entry['name'] }.each do |name, module_entries|
|
66
|
+
if module_entries.size == 1
|
67
|
+
module_name = "#{base_module_name}.#{name}"
|
68
|
+
yield module_name, module_entries.first, granularity
|
69
|
+
else
|
70
|
+
module_entries.each do |entry|
|
71
|
+
module_name = "#{base_module_name}.#{name}:#{entry['lineno']}"
|
72
|
+
yield module_name, entry, granularity
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def has_error?(file_name, results)
|
79
|
+
if results.is_a?(Array)
|
80
|
+
false
|
81
|
+
else
|
82
|
+
error = results['error'] if results.is_a?(Hash)
|
83
|
+
error ||= 'Unknown error'
|
84
|
+
|
85
|
+
# This debug print has been kept in order that if there is some non-fatal error it does not get ignored
|
86
|
+
logger.debug("error parsing file #{file_name}: #{error}")
|
87
|
+
|
88
|
+
true
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
metadata
ADDED
@@ -0,0 +1,198 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kolekti_radon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 5.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Diego Araújo
|
8
|
+
- Daniel Miranda
|
9
|
+
- Rafael Reggiani Manzo
|
10
|
+
autorequire:
|
11
|
+
bindir: exe
|
12
|
+
cert_chain: []
|
13
|
+
date: 2018-03-06 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: bundler
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.11'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - "~>"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '1.11'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: rake
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '10.0'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '10.0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: rspec
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '3.0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '3.0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: cucumber
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '2.1'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '2.1'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: simplecov
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: codeclimate-test-reporter
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "<"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: 1.0.0
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "<"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 1.0.0
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: factory_girl
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
type: :development
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: byebug
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
type: :development
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: kolekti
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
description:
|
142
|
+
email:
|
143
|
+
- diegoamc@protonmail.ch
|
144
|
+
- danielkza2@gmail.com
|
145
|
+
- rr.manzo@protonmail.com
|
146
|
+
executables: []
|
147
|
+
extensions: []
|
148
|
+
extra_rdoc_files: []
|
149
|
+
files:
|
150
|
+
- ".config/cucumber.yml"
|
151
|
+
- ".gitignore"
|
152
|
+
- ".rspec"
|
153
|
+
- ".ruby-gemset"
|
154
|
+
- ".ruby-version"
|
155
|
+
- ".travis.yml"
|
156
|
+
- CHANGELOG.md
|
157
|
+
- COPYING
|
158
|
+
- COPYING.LESSER
|
159
|
+
- Gemfile
|
160
|
+
- README.md
|
161
|
+
- Rakefile
|
162
|
+
- bin/console
|
163
|
+
- bin/setup
|
164
|
+
- gem_tasks/cucumber.rake
|
165
|
+
- kolekti_radon.gemspec
|
166
|
+
- lib/kolekti/radon.rb
|
167
|
+
- lib/kolekti/radon/collector.rb
|
168
|
+
- lib/kolekti/radon/metrics.yml
|
169
|
+
- lib/kolekti/radon/parser.rb
|
170
|
+
- lib/kolekti/radon/parser/base.rb
|
171
|
+
- lib/kolekti/radon/parser/cyclomatic.rb
|
172
|
+
- lib/kolekti/radon/parser/maintainability.rb
|
173
|
+
- lib/kolekti/radon/parser/raw.rb
|
174
|
+
- lib/kolekti/radon/version.rb
|
175
|
+
homepage: https://gitlab.com/mezuro/mezuro/tree/master/kalibro/kolekti_radon.git
|
176
|
+
licenses: []
|
177
|
+
metadata: {}
|
178
|
+
post_install_message:
|
179
|
+
rdoc_options: []
|
180
|
+
require_paths:
|
181
|
+
- lib
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
requirements: []
|
193
|
+
rubyforge_project:
|
194
|
+
rubygems_version: 2.6.11
|
195
|
+
signing_key:
|
196
|
+
specification_version: 4
|
197
|
+
summary: Metric collecting support for Python that serves Kolekti.
|
198
|
+
test_files: []
|