metric_fu 4.11.3 → 4.11.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.rubocop.yml +15 -0
- data/.rubocop_todo.yml +69 -0
- data/.travis.yml +0 -1
- data/CONTRIBUTORS +1 -1
- data/Gemfile +23 -20
- data/Guardfile +9 -9
- data/HISTORY.md +10 -1
- data/checksum/metric_fu-4.11.3.gem.sha512 +1 -0
- data/config/rubocop.yml +269 -0
- data/gem_tasks/rubocop.rake +10 -0
- data/lib/metric_fu.rb +11 -9
- data/lib/metric_fu/calculate.rb +0 -1
- data/lib/metric_fu/cli/client.rb +6 -6
- data/lib/metric_fu/cli/helper.rb +22 -13
- data/lib/metric_fu/cli/parser.rb +14 -18
- data/lib/metric_fu/configuration.rb +7 -11
- data/lib/metric_fu/constantize.rb +4 -4
- data/lib/metric_fu/data_structures/line_numbers.rb +10 -11
- data/lib/metric_fu/data_structures/location.rb +12 -14
- data/lib/metric_fu/data_structures/sexp_node.rb +31 -13
- data/lib/metric_fu/environment.rb +29 -31
- data/lib/metric_fu/formatter.rb +4 -6
- data/lib/metric_fu/formatter/html.rb +13 -13
- data/lib/metric_fu/formatter/syntax.rb +5 -7
- data/lib/metric_fu/formatter/yaml.rb +1 -1
- data/lib/metric_fu/gem_run.rb +13 -15
- data/lib/metric_fu/gem_version.rb +9 -11
- data/lib/metric_fu/generator.rb +5 -8
- data/lib/metric_fu/io.rb +13 -15
- data/lib/metric_fu/loader.rb +17 -18
- data/lib/metric_fu/logger.rb +15 -18
- data/lib/metric_fu/logging/mf_debugger.rb +4 -4
- data/lib/metric_fu/metric.rb +11 -12
- data/lib/metric_fu/metrics/cane/generator.rb +10 -9
- data/lib/metric_fu/metrics/cane/grapher.rb +5 -7
- data/lib/metric_fu/metrics/cane/metric.rb +6 -8
- data/lib/metric_fu/metrics/cane/report.html.erb +3 -3
- data/lib/metric_fu/metrics/cane/violations.rb +6 -6
- data/lib/metric_fu/metrics/churn/generator.rb +2 -6
- data/lib/metric_fu/metrics/churn/hotspot.rb +1 -3
- data/lib/metric_fu/metrics/churn/metric.rb +5 -7
- data/lib/metric_fu/metrics/flay/generator.rb +7 -11
- data/lib/metric_fu/metrics/flay/grapher.rb +5 -6
- data/lib/metric_fu/metrics/flay/hotspot.rb +5 -7
- data/lib/metric_fu/metrics/flay/metric.rb +5 -7
- data/lib/metric_fu/metrics/flog/generator.rb +22 -23
- data/lib/metric_fu/metrics/flog/grapher.rb +11 -11
- data/lib/metric_fu/metrics/flog/hotspot.rb +3 -5
- data/lib/metric_fu/metrics/flog/metric.rb +3 -5
- data/lib/metric_fu/metrics/hotspots/analysis/analyzed_problems.rb +0 -1
- data/lib/metric_fu/metrics/hotspots/analysis/analyzer_tables.rb +19 -18
- data/lib/metric_fu/metrics/hotspots/analysis/grouping.rb +0 -2
- data/lib/metric_fu/metrics/hotspots/analysis/groupings.rb +1 -3
- data/lib/metric_fu/metrics/hotspots/analysis/problems.rb +4 -6
- data/lib/metric_fu/metrics/hotspots/analysis/ranked_problem_location.rb +14 -9
- data/lib/metric_fu/metrics/hotspots/analysis/ranking.rb +4 -5
- data/lib/metric_fu/metrics/hotspots/analysis/rankings.rb +1 -3
- data/lib/metric_fu/metrics/hotspots/analysis/record.rb +3 -5
- data/lib/metric_fu/metrics/hotspots/analysis/scoring_strategies.rb +0 -2
- data/lib/metric_fu/metrics/hotspots/analysis/table.rb +3 -4
- data/lib/metric_fu/metrics/hotspots/generator.rb +3 -6
- data/lib/metric_fu/metrics/hotspots/hotspot.rb +13 -13
- data/lib/metric_fu/metrics/hotspots/hotspot_analyzer.rb +5 -8
- data/lib/metric_fu/metrics/hotspots/metric.rb +1 -3
- data/lib/metric_fu/metrics/hotspots/report.html.erb +1 -1
- data/lib/metric_fu/metrics/rails_best_practices/generator.rb +10 -12
- data/lib/metric_fu/metrics/rails_best_practices/grapher.rb +5 -6
- data/lib/metric_fu/metrics/rails_best_practices/metric.rb +1 -3
- data/lib/metric_fu/metrics/rcov/external_client.rb +1 -3
- data/lib/metric_fu/metrics/rcov/generator.rb +13 -15
- data/lib/metric_fu/metrics/rcov/grapher.rb +6 -7
- data/lib/metric_fu/metrics/rcov/hotspot.rb +5 -7
- data/lib/metric_fu/metrics/rcov/metric.rb +5 -7
- data/lib/metric_fu/metrics/rcov/rcov_format_coverage.rb +16 -55
- data/lib/metric_fu/metrics/rcov/rcov_line.rb +48 -0
- data/lib/metric_fu/metrics/rcov/report.html.erb +2 -2
- data/lib/metric_fu/metrics/rcov/simplecov_formatter.rb +10 -11
- data/lib/metric_fu/metrics/reek/generator.rb +22 -23
- data/lib/metric_fu/metrics/reek/grapher.rb +5 -6
- data/lib/metric_fu/metrics/reek/hotspot.rb +5 -7
- data/lib/metric_fu/metrics/reek/metric.rb +2 -4
- data/lib/metric_fu/metrics/roodi/generator.rb +9 -10
- data/lib/metric_fu/metrics/roodi/grapher.rb +5 -6
- data/lib/metric_fu/metrics/roodi/hotspot.rb +1 -3
- data/lib/metric_fu/metrics/roodi/metric.rb +2 -4
- data/lib/metric_fu/metrics/saikuro/generator.rb +23 -27
- data/lib/metric_fu/metrics/saikuro/hotspot.rb +1 -3
- data/lib/metric_fu/metrics/saikuro/metric.rb +7 -8
- data/lib/metric_fu/metrics/saikuro/parsing_element.rb +6 -8
- data/lib/metric_fu/metrics/saikuro/report.html.erb +1 -1
- data/lib/metric_fu/metrics/saikuro/scratch_file.rb +24 -29
- data/lib/metric_fu/metrics/stats/generator.rb +9 -12
- data/lib/metric_fu/metrics/stats/grapher.rb +8 -9
- data/lib/metric_fu/metrics/stats/hotspot.rb +1 -3
- data/lib/metric_fu/metrics/stats/metric.rb +3 -5
- data/lib/metric_fu/reporter.rb +1 -1
- data/lib/metric_fu/reporting/graphs/graph.rb +8 -12
- data/lib/metric_fu/reporting/graphs/grapher.rb +7 -9
- data/lib/metric_fu/reporting/result.rb +0 -3
- data/lib/metric_fu/run.rb +12 -3
- data/lib/metric_fu/tasks/metric_fu.rake +8 -8
- data/lib/metric_fu/templates/configuration.rb +2 -5
- data/lib/metric_fu/templates/metrics_template.rb +19 -19
- data/lib/metric_fu/templates/report.rb +5 -8
- data/lib/metric_fu/templates/template.rb +20 -24
- data/lib/metric_fu/utility.rb +7 -8
- data/lib/metric_fu/version.rb +1 -1
- data/metric_fu.gemspec +31 -32
- data/spec/cli/helper_spec.rb +7 -14
- data/spec/dummy/lib/bad_encoding.rb +1 -1
- data/spec/fixtures/coverage-153.rb +2 -2
- data/spec/fixtures/coverage.rb +2 -2
- data/spec/metric_fu/calculate_spec.rb +3 -3
- data/spec/metric_fu/configuration_spec.rb +70 -82
- data/spec/metric_fu/data_structures/line_numbers_spec.rb +3 -5
- data/spec/metric_fu/data_structures/location_spec.rb +13 -31
- data/spec/metric_fu/formatter/configuration_spec.rb +11 -13
- data/spec/metric_fu/formatter/html_spec.rb +21 -28
- data/spec/metric_fu/formatter/yaml_spec.rb +9 -17
- data/spec/metric_fu/formatter_spec.rb +6 -6
- data/spec/metric_fu/gem_version_spec.rb +3 -5
- data/spec/metric_fu/generator_spec.rb +28 -38
- data/spec/metric_fu/loader_spec.rb +1 -3
- data/spec/metric_fu/metric_spec.rb +17 -21
- data/spec/metric_fu/metrics/cane/configuration_spec.rb +8 -8
- data/spec/metric_fu/metrics/cane/generator_spec.rb +26 -29
- data/spec/metric_fu/metrics/churn/configuration_spec.rb +6 -8
- data/spec/metric_fu/metrics/churn/generator_spec.rb +6 -11
- data/spec/metric_fu/metrics/flay/configuration_spec.rb +6 -8
- data/spec/metric_fu/metrics/flay/generator_spec.rb +36 -37
- data/spec/metric_fu/metrics/flay/grapher_spec.rb +2 -2
- data/spec/metric_fu/metrics/flog/configuration_spec.rb +11 -13
- data/spec/metric_fu/metrics/flog/generator_spec.rb +29 -31
- data/spec/metric_fu/metrics/flog/grapher_spec.rb +8 -10
- data/spec/metric_fu/metrics/hotspots/analysis/analyzed_problems_spec.rb +18 -24
- data/spec/metric_fu/metrics/hotspots/analysis/analyzer_tables_spec.rb +12 -17
- data/spec/metric_fu/metrics/hotspots/analysis/ranking_spec.rb +2 -6
- data/spec/metric_fu/metrics/hotspots/analysis/rankings_spec.rb +5 -14
- data/spec/metric_fu/metrics/hotspots/analysis/table_spec.rb +1 -3
- data/spec/metric_fu/metrics/hotspots/generator_spec.rb +6 -8
- data/spec/metric_fu/metrics/hotspots/hotspot_analyzer_spec.rb +1 -3
- data/spec/metric_fu/metrics/hotspots/hotspot_spec.rb +4 -5
- data/spec/metric_fu/metrics/rails_best_practices/configuration_spec.rb +6 -10
- data/spec/metric_fu/metrics/rails_best_practices/generator_spec.rb +2 -3
- data/spec/metric_fu/metrics/rails_best_practices/grapher_spec.rb +3 -3
- data/spec/metric_fu/metrics/rcov/configuration_spec.rb +20 -22
- data/spec/metric_fu/metrics/rcov/generator_spec.rb +6 -10
- data/spec/metric_fu/metrics/rcov/grapher_spec.rb +2 -2
- data/spec/metric_fu/metrics/rcov/hotspot_spec.rb +8 -8
- data/spec/metric_fu/metrics/rcov/rcov_line_spec.rb +89 -0
- data/spec/metric_fu/metrics/rcov/simplecov_formatter_spec.rb +31 -33
- data/spec/metric_fu/metrics/reek/configuration_spec.rb +6 -6
- data/spec/metric_fu/metrics/reek/generator_spec.rb +19 -20
- data/spec/metric_fu/metrics/reek/grapher_spec.rb +4 -4
- data/spec/metric_fu/metrics/roodi/configuration_spec.rb +7 -9
- data/spec/metric_fu/metrics/roodi/generator_spec.rb +3 -3
- data/spec/metric_fu/metrics/roodi/grapher_spec.rb +2 -2
- data/spec/metric_fu/metrics/saikuro/configuration_spec.rb +18 -19
- data/spec/metric_fu/metrics/saikuro/generator_spec.rb +7 -7
- data/spec/metric_fu/metrics/stats/generator_spec.rb +9 -9
- data/spec/metric_fu/metrics/stats/grapher_spec.rb +2 -2
- data/spec/metric_fu/reporter_spec.rb +3 -4
- data/spec/metric_fu/reporting/graphs/graph_spec.rb +1 -4
- data/spec/metric_fu/reporting/graphs/grapher_spec.rb +5 -5
- data/spec/metric_fu/reporting/result_spec.rb +9 -11
- data/spec/metric_fu/run_spec.rb +18 -32
- data/spec/metric_fu/templates/configuration_spec.rb +28 -34
- data/spec/metric_fu/templates/metrics_template_spec.rb +11 -0
- data/spec/metric_fu/templates/report_spec.rb +4 -4
- data/spec/metric_fu/templates/template_spec.rb +62 -48
- data/spec/metric_fu/utility_spec.rb +2 -2
- data/spec/metric_fu_spec.rb +5 -7
- data/spec/shared/configured.rb +9 -11
- data/spec/shared/test_coverage.rb +5 -9
- data/spec/spec_helper.rb +9 -9
- data/spec/support/deferred_garbaged_collection.rb +1 -2
- data/spec/support/matcher_create_file.rb +2 -4
- data/spec/support/matcher_create_files.rb +2 -4
- data/spec/support/suite.rb +3 -3
- data/spec/support/test_fixtures.rb +5 -7
- data/spec/support/timeout.rb +1 -1
- data/spec/support/usage_test.rb +23 -24
- data/spec/usage_test_spec.rb +18 -20
- metadata +12 -2
- metadata.gz.sig +0 -0
@@ -1,14 +1,13 @@
|
|
1
1
|
module MetricFu
|
2
2
|
class MetricReek < Metric
|
3
|
-
|
4
3
|
def name
|
5
4
|
:reek
|
6
5
|
end
|
7
6
|
|
8
7
|
def default_run_options
|
9
8
|
{
|
10
|
-
:
|
11
|
-
:
|
9
|
+
dirs_to_reek: MetricFu::Io::FileSystem.directory("code_dirs"),
|
10
|
+
config_file_pattern: nil,
|
12
11
|
}
|
13
12
|
end
|
14
13
|
|
@@ -23,6 +22,5 @@ module MetricFu
|
|
23
22
|
def activate
|
24
23
|
super
|
25
24
|
end
|
26
|
-
|
27
25
|
end
|
28
26
|
end
|
@@ -1,40 +1,39 @@
|
|
1
1
|
module MetricFu
|
2
2
|
class RoodiGenerator < Generator
|
3
|
-
|
4
3
|
def self.metric
|
5
4
|
:roodi
|
6
5
|
end
|
7
6
|
|
8
7
|
def emit
|
9
|
-
files_to_analyze = options[:dirs_to_roodi].map{|dir| Dir[File.join(dir, "**/*.rb")] }
|
8
|
+
files_to_analyze = options[:dirs_to_roodi].map { |dir| Dir[File.join(dir, "**/*.rb")] }
|
10
9
|
files = remove_excluded_files(files_to_analyze.flatten)
|
11
10
|
config = options[:roodi_config] ? "-config=#{options[:roodi_config]}" : ""
|
12
|
-
args = "#{config} #{files.join(
|
11
|
+
args = "#{config} #{files.join(' ')}"
|
13
12
|
@output = run!(args)
|
14
13
|
end
|
15
14
|
|
16
15
|
def analyze
|
17
16
|
@output = MetricFu::Utility.strip_escape_codes(@output)
|
18
|
-
@matches = @output.chomp.split("\n").map{|m| m.split(" - ") }
|
17
|
+
@matches = @output.chomp.split("\n").map { |m| m.split(" - ") }
|
19
18
|
total = @matches.pop
|
20
|
-
@matches.reject! {|array| array.size < 2 }
|
19
|
+
@matches.reject! { |array| array.size < 2 }
|
21
20
|
@matches.map! do |match|
|
22
|
-
file, line = match[0].split(
|
21
|
+
file, line = match[0].split(":")
|
23
22
|
problem = match[1]
|
24
|
-
{:
|
23
|
+
{ file: file, line: line, problem: problem }
|
25
24
|
end
|
26
|
-
@roodi_results = {:
|
25
|
+
@roodi_results = { total: total, problems: @matches }
|
27
26
|
end
|
28
27
|
|
29
28
|
def to_h
|
30
|
-
{:
|
29
|
+
{ roodi: @roodi_results }
|
31
30
|
end
|
32
31
|
|
33
32
|
def per_file_info(out)
|
34
33
|
@matches.each do |match|
|
35
34
|
out[match[:file]] ||= {}
|
36
35
|
out[match[:file]][match[:line]] ||= []
|
37
|
-
out[match[:file]][match[:line]] << {:
|
36
|
+
out[match[:file]][match[:line]] << { type: :roodi, description: match[:problem] }
|
38
37
|
end
|
39
38
|
end
|
40
39
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
MetricFu.reporting_require {
|
1
|
+
MetricFu.reporting_require { "graphs/grapher" }
|
2
2
|
module MetricFu
|
3
3
|
class RoodiGrapher < Grapher
|
4
4
|
attr_accessor :roodi_count, :labels
|
@@ -16,23 +16,22 @@ module MetricFu
|
|
16
16
|
def get_metrics(metrics, date)
|
17
17
|
if metrics && metrics[:roodi]
|
18
18
|
@roodi_count.push(metrics[:roodi][:problems].size)
|
19
|
-
@labels.update(
|
19
|
+
@labels.update(@labels.size => date)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
def title
|
24
|
-
|
24
|
+
"Roodi: design problems"
|
25
25
|
end
|
26
26
|
|
27
27
|
def data
|
28
28
|
[
|
29
|
-
[
|
29
|
+
["roodi", @roodi_count.join(",")]
|
30
30
|
]
|
31
31
|
end
|
32
32
|
|
33
33
|
def output_filename
|
34
|
-
|
34
|
+
"roodi.js"
|
35
35
|
end
|
36
|
-
|
37
36
|
end
|
38
37
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class MetricFu::RoodiHotspot < MetricFu::Hotspot
|
2
|
-
|
3
2
|
COLUMNS = %w{problems}
|
4
3
|
|
5
4
|
def columns
|
@@ -23,7 +22,7 @@ class MetricFu::RoodiHotspot < MetricFu::Hotspot
|
|
23
22
|
end
|
24
23
|
|
25
24
|
def generate_records(data, table)
|
26
|
-
return if data==nil
|
25
|
+
return if data == nil
|
27
26
|
Array(data[:problems]).each do |problem|
|
28
27
|
table << {
|
29
28
|
"metric" => name,
|
@@ -37,5 +36,4 @@ class MetricFu::RoodiHotspot < MetricFu::Hotspot
|
|
37
36
|
occurences = group.size
|
38
37
|
"found #{occurences} design problems"
|
39
38
|
end
|
40
|
-
|
41
39
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
module MetricFu
|
2
2
|
class MetricRoodi < Metric
|
3
|
-
|
4
3
|
def name
|
5
4
|
:roodi
|
6
5
|
end
|
7
6
|
|
8
7
|
def default_run_options
|
9
|
-
{ :
|
10
|
-
|
8
|
+
{ dirs_to_roodi: MetricFu::Io::FileSystem.directory("code_dirs"),
|
9
|
+
roodi_config: "#{MetricFu::Io::FileSystem.directory('root_directory')}/config/roodi_config.yml" }
|
11
10
|
end
|
12
11
|
|
13
12
|
def has_graph?
|
@@ -21,6 +20,5 @@ module MetricFu
|
|
21
20
|
def activate
|
22
21
|
super
|
23
22
|
end
|
24
|
-
|
25
23
|
end
|
26
24
|
end
|
@@ -1,12 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
MetricFu.lib_require {
|
3
|
-
MetricFu.metrics_require {
|
4
|
-
MetricFu.metrics_require {
|
5
|
-
MetricFu.data_structures_require {
|
2
|
+
MetricFu.lib_require { "utility" }
|
3
|
+
MetricFu.metrics_require { "saikuro/scratch_file" }
|
4
|
+
MetricFu.metrics_require { "saikuro/parsing_element" }
|
5
|
+
MetricFu.data_structures_require { "line_numbers" }
|
6
6
|
module MetricFu
|
7
|
-
|
8
7
|
class SaikuroGenerator < MetricFu::Generator
|
9
|
-
|
10
8
|
def self.metric
|
11
9
|
:saikuro
|
12
10
|
end
|
@@ -32,11 +30,11 @@ module MetricFu
|
|
32
30
|
def to_h
|
33
31
|
@saikuro_data = {
|
34
32
|
files: files_with_relative_paths(@files),
|
35
|
-
classes: @classes.map
|
36
|
-
methods: @meths.map
|
37
|
-
|
33
|
+
classes: @classes.map(&:to_h),
|
34
|
+
methods: @meths.map(&:to_h),
|
35
|
+
}
|
38
36
|
clear_scratch_files!
|
39
|
-
{:
|
37
|
+
{ saikuro: @saikuro_data }
|
40
38
|
end
|
41
39
|
|
42
40
|
def per_file_info(out)
|
@@ -53,12 +51,12 @@ module MetricFu
|
|
53
51
|
filename = file_data[:filename]
|
54
52
|
output = out[filename]
|
55
53
|
method_data_for_file_data(file_data) do |method_data|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
54
|
+
line = line_numbers.start_line_for_method(method_data[:name]).to_s
|
55
|
+
result = {
|
56
|
+
type: :saikuro,
|
57
|
+
description: "Complexity #{method_data[:complexity]}"
|
58
|
+
}
|
59
|
+
output[line] << result
|
62
60
|
end
|
63
61
|
out
|
64
62
|
end
|
@@ -70,7 +68,7 @@ module MetricFu
|
|
70
68
|
mf_log "ruby_parser blew up while trying to parse #{file_path}. You won't have method level Saikuro information for this file."
|
71
69
|
end
|
72
70
|
|
73
|
-
def method_data_for_file_data(file_data, &
|
71
|
+
def method_data_for_file_data(file_data, &_block)
|
74
72
|
return unless block_given?
|
75
73
|
file_data[:classes].each do |class_data|
|
76
74
|
class_data[:methods].each do |method_data|
|
@@ -82,7 +80,7 @@ module MetricFu
|
|
82
80
|
private
|
83
81
|
|
84
82
|
def erb_file?(filename)
|
85
|
-
File.extname(filename) ==
|
83
|
+
File.extname(filename) == ".erb"
|
86
84
|
end
|
87
85
|
|
88
86
|
def file_not_exists?(filename)
|
@@ -90,7 +88,7 @@ module MetricFu
|
|
90
88
|
end
|
91
89
|
|
92
90
|
def sort_methods(methods)
|
93
|
-
methods.sort_by {|method| method.complexity.to_i}.reverse
|
91
|
+
methods.sort_by { |method| method.complexity.to_i }.reverse
|
94
92
|
end
|
95
93
|
|
96
94
|
def assemble_methods(files)
|
@@ -107,23 +105,23 @@ module MetricFu
|
|
107
105
|
end
|
108
106
|
|
109
107
|
def sort_classes(classes)
|
110
|
-
classes.sort_by {|k| k.complexity.to_i}.reverse
|
108
|
+
classes.sort_by { |k| k.complexity.to_i }.reverse
|
111
109
|
end
|
112
110
|
|
113
111
|
def assemble_classes(files)
|
114
|
-
files.map
|
112
|
+
files.map(&:elements).flatten
|
115
113
|
end
|
116
114
|
|
117
115
|
def sort_files(files)
|
118
116
|
files.sort_by do |file|
|
119
117
|
file.elements.
|
120
|
-
|
121
|
-
|
118
|
+
max { |a, b| a.complexity.to_i <=> b.complexity.to_i }.
|
119
|
+
complexity.to_i
|
122
120
|
end.reverse
|
123
121
|
end
|
124
122
|
|
125
123
|
def assemble_files
|
126
|
-
SaikuroScratchFile.assemble_files(
|
124
|
+
SaikuroScratchFile.assemble_files(Dir.glob("#{metric_directory}/**/*.html"))
|
127
125
|
end
|
128
126
|
|
129
127
|
def files_with_relative_paths(files)
|
@@ -136,14 +134,12 @@ module MetricFu
|
|
136
134
|
|
137
135
|
def file_relative_path(file)
|
138
136
|
filepath = file.filepath
|
139
|
-
path = filepath.gsub(/^#{metric_directory}\//,
|
137
|
+
path = filepath.gsub(/^#{metric_directory}\//, "")
|
140
138
|
"#{path}/#{file.filename}"
|
141
139
|
end
|
142
140
|
|
143
141
|
def clear_scratch_files!
|
144
142
|
MetricFu::Utility.rm_rf(metric_directory)
|
145
143
|
end
|
146
|
-
|
147
144
|
end
|
148
|
-
|
149
145
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class MetricFu::SaikuroHotspot < MetricFu::Hotspot
|
2
|
-
|
3
2
|
COLUMNS = %w{lines complexity}
|
4
3
|
|
5
4
|
def columns
|
@@ -47,7 +46,6 @@ class MetricFu::SaikuroHotspot < MetricFu::Hotspot
|
|
47
46
|
def present_group(group)
|
48
47
|
occurences = group.size
|
49
48
|
complexity = get_mean(group.column("complexity"))
|
50
|
-
"#{
|
49
|
+
"#{'average ' if occurences > 1}complexity is %.1f" % complexity
|
51
50
|
end
|
52
|
-
|
53
51
|
end
|
@@ -1,19 +1,18 @@
|
|
1
1
|
module MetricFu
|
2
2
|
class MetricSaikuro < Metric
|
3
|
-
|
4
3
|
def name
|
5
4
|
:saikuro
|
6
5
|
end
|
7
6
|
|
8
7
|
def default_run_options
|
9
8
|
{
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
9
|
+
output_directory: MetricFu::Io::FileSystem.scratch_directory(name),
|
10
|
+
input_directory: MetricFu::Io::FileSystem.directory("code_dirs"),
|
11
|
+
cyclo: "",
|
12
|
+
filter_cyclo: "0",
|
13
|
+
warn_cyclo: "5",
|
14
|
+
error_cyclo: "7",
|
15
|
+
formater: "text",
|
17
16
|
}
|
18
17
|
end
|
19
18
|
|
@@ -1,10 +1,9 @@
|
|
1
1
|
module MetricFu
|
2
2
|
class SaikuroParsingElement
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
LINES_REGEX=/Lines:(.*)/
|
3
|
+
TYPE_REGEX = /Type:(.*) Name/
|
4
|
+
NAME_REGEX = /Name:(.*) Complexity/
|
5
|
+
COMPLEXITY_REGEX = /Complexity:(.*) Lines/
|
6
|
+
LINES_REGEX = /Lines:(.*)/
|
8
7
|
|
9
8
|
attr_reader :complexity, :lines, :defs, :element_type
|
10
9
|
attr_accessor :name
|
@@ -23,7 +22,7 @@ module MetricFu
|
|
23
22
|
end
|
24
23
|
|
25
24
|
def to_h
|
26
|
-
base = {:
|
25
|
+
base = { name: @name, complexity: @complexity.to_i, lines: @lines.to_i }
|
27
26
|
unless @defs.empty?
|
28
27
|
defs = @defs.map do |my_def|
|
29
28
|
my_def = my_def.to_h
|
@@ -32,8 +31,7 @@ module MetricFu
|
|
32
31
|
end
|
33
32
|
base[:defs] = defs
|
34
33
|
end
|
35
|
-
|
34
|
+
base
|
36
35
|
end
|
37
|
-
|
38
36
|
end
|
39
37
|
end
|
@@ -40,7 +40,7 @@
|
|
40
40
|
<% @saikuro[:files].each do |file| %>
|
41
41
|
<% file[:classes].each do |klass| %>
|
42
42
|
<% if !klass[:methods].empty? %>
|
43
|
-
<h3><%=
|
43
|
+
<h3><%=link_to_filename(file[:filename])%></h3>
|
44
44
|
<h4>Class : <%= klass[:class_name] %></h4>
|
45
45
|
<h5>Total complexity : <%= klass[:complexity] %></h5>
|
46
46
|
<h5>Total lines : <%= klass[:lines] %></h5>
|
@@ -1,7 +1,6 @@
|
|
1
|
-
MetricFu.metrics_require {
|
1
|
+
MetricFu.metrics_require { "saikuro/parsing_element" }
|
2
2
|
module MetricFu
|
3
3
|
class SaikuroScratchFile
|
4
|
-
|
5
4
|
def self.assemble_files(glob)
|
6
5
|
files = []
|
7
6
|
glob.each do |path|
|
@@ -36,7 +35,7 @@ module MetricFu
|
|
36
35
|
end
|
37
36
|
|
38
37
|
def filename
|
39
|
-
File.basename(@path,
|
38
|
+
File.basename(@path, "_cyclo.html")
|
40
39
|
end
|
41
40
|
|
42
41
|
def filepath
|
@@ -45,38 +44,35 @@ module MetricFu
|
|
45
44
|
|
46
45
|
def to_h
|
47
46
|
merge_classes
|
48
|
-
{:
|
47
|
+
{ classes: @elements }
|
49
48
|
end
|
50
49
|
|
51
50
|
def get_elements(io)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
@elements << element
|
59
|
-
element = nil
|
60
|
-
end
|
61
|
-
line = io.readline
|
62
|
-
element = MetricFu::SaikuroParsingElement.new(line)
|
63
|
-
elsif line.match(/END/)
|
64
|
-
@elements << element if element
|
51
|
+
while (line = io.readline)
|
52
|
+
return [] if line.nil? || line !~ /\S/
|
53
|
+
element ||= nil
|
54
|
+
if line.match(/START/)
|
55
|
+
unless element.nil?
|
56
|
+
@elements << element
|
65
57
|
element = nil
|
66
|
-
else
|
67
|
-
element << line if element
|
68
58
|
end
|
59
|
+
line = io.readline
|
60
|
+
element = MetricFu::SaikuroParsingElement.new(line)
|
61
|
+
elsif line.match(/END/)
|
62
|
+
@elements << element if element
|
63
|
+
element = nil
|
64
|
+
else
|
65
|
+
element << line if element
|
69
66
|
end
|
70
|
-
rescue EOFError
|
71
|
-
nil
|
72
67
|
end
|
68
|
+
rescue EOFError
|
69
|
+
nil
|
73
70
|
end
|
74
71
|
|
75
|
-
|
76
72
|
def merge_classes
|
77
73
|
new_elements = []
|
78
74
|
get_class_names.each do |target_class|
|
79
|
-
elements = @elements.find_all {|el| el.name == target_class }
|
75
|
+
elements = @elements.find_all { |el| el.name == target_class }
|
80
76
|
complexity = 0
|
81
77
|
lines = 0
|
82
78
|
defns = []
|
@@ -86,12 +82,12 @@ module MetricFu
|
|
86
82
|
defns << el.defs
|
87
83
|
end
|
88
84
|
|
89
|
-
new_element = {:
|
90
|
-
|
91
|
-
|
92
|
-
|
85
|
+
new_element = { class_name: target_class,
|
86
|
+
complexity: complexity,
|
87
|
+
lines: lines,
|
88
|
+
methods: defns.flatten.map(&:to_h) }
|
93
89
|
new_element[:methods] = new_element[:methods].
|
94
|
-
sort_by {|x| x[:complexity] }.
|
90
|
+
sort_by { |x| x[:complexity] }.
|
95
91
|
reverse
|
96
92
|
|
97
93
|
new_elements << new_element
|
@@ -108,6 +104,5 @@ module MetricFu
|
|
108
104
|
end
|
109
105
|
class_names
|
110
106
|
end
|
111
|
-
|
112
107
|
end
|
113
108
|
end
|