feature_map 1.2.2 → 1.2.3
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 +4 -4
- data/README.md +0 -1
- data/bin/featuremap +0 -1
- data/lib/feature_map/cli.rb +0 -2
- data/lib/feature_map/code_features/plugin.rb +2 -21
- data/lib/feature_map/code_features/plugins/identity.rb +1 -8
- data/lib/feature_map/code_features.rb +1 -31
- data/lib/feature_map/commit.rb +0 -19
- data/lib/feature_map/configuration.rb +40 -17
- data/lib/feature_map/constants.rb +3 -5
- data/lib/feature_map/mapper.rb +0 -26
- data/lib/feature_map/output_color.rb +0 -11
- data/lib/feature_map/private/additional_metrics_file.rb +9 -103
- data/lib/feature_map/private/assignment_applicator.rb +0 -12
- data/lib/feature_map/private/assignment_mappers/directory_assignment.rb +4 -26
- data/lib/feature_map/private/assignment_mappers/feature_definition_assignment.rb +1 -21
- data/lib/feature_map/private/assignment_mappers/feature_globs.rb +7 -40
- data/lib/feature_map/private/assignment_mappers/file_annotations.rb +20 -44
- data/lib/feature_map/private/assignments_file.rb +8 -54
- data/lib/feature_map/private/code_cov.rb +2 -29
- data/lib/feature_map/private/cyclomatic_complexity_calculator.rb +1 -7
- data/lib/feature_map/private/docs/index.html +2 -2
- data/lib/feature_map/private/documentation_site.rb +0 -16
- data/lib/feature_map/private/extension_loader.rb +0 -3
- data/lib/feature_map/private/feature_assigner.rb +0 -4
- data/lib/feature_map/private/feature_metrics_calculator.rb +2 -16
- data/lib/feature_map/private/feature_plugins/assignment.rb +0 -6
- data/lib/feature_map/private/glob_cache.rb +2 -29
- data/lib/feature_map/private/health_calculator.rb +122 -0
- data/lib/feature_map/private/lines_of_code_calculator.rb +10 -21
- data/lib/feature_map/private/metrics_file.rb +1 -25
- data/lib/feature_map/private/percentile_metrics_calculator.rb +117 -0
- data/lib/feature_map/private/release_notification_builder.rb +1 -13
- data/lib/feature_map/private/test_coverage_file.rb +12 -39
- data/lib/feature_map/private/test_pyramid_file.rb +0 -41
- data/lib/feature_map/private/todo_inspector.rb +16 -30
- data/lib/feature_map/private/validations/features_up_to_date.rb +1 -6
- data/lib/feature_map/private/validations/files_have_features.rb +2 -7
- data/lib/feature_map/private/validations/files_have_unique_features.rb +1 -6
- data/lib/feature_map/private.rb +7 -44
- data/lib/feature_map/validator.rb +0 -13
- data/lib/feature_map.rb +8 -49
- metadata +4 -44
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require 'faraday'
|
@@ -12,26 +11,6 @@ module FeatureMap
|
|
12
11
|
class ApiError < StandardError; end
|
13
12
|
class ConfigurationError < StandardError; end
|
14
13
|
|
15
|
-
extend T::Sig
|
16
|
-
|
17
|
-
FilePath = T.type_alias { String }
|
18
|
-
CoverageStat = T.type_alias { String }
|
19
|
-
|
20
|
-
Coverage = T.type_alias do
|
21
|
-
T::Hash[
|
22
|
-
CoverageStat,
|
23
|
-
Integer
|
24
|
-
]
|
25
|
-
end
|
26
|
-
|
27
|
-
TestCoverageStats = T.type_alias do
|
28
|
-
T::Hash[
|
29
|
-
FilePath,
|
30
|
-
Coverage
|
31
|
-
]
|
32
|
-
end
|
33
|
-
|
34
|
-
sig { params(commit_sha: String, api_token: String).returns(TestCoverageStats) }
|
35
14
|
def self.fetch_coverage_stats(commit_sha, api_token)
|
36
15
|
commit_details_response = fetch_commit_details(commit_sha, api_token)
|
37
16
|
raise ApiError, "Failed to retrieve CodeCov stats for commit #{commit_sha}. Response: #{commit_details_response.status} - #{commit_details_response.body}" unless commit_details_response.success?
|
@@ -39,14 +18,12 @@ module FeatureMap
|
|
39
18
|
build_coverage_status(commit_details_response.body)
|
40
19
|
end
|
41
20
|
|
42
|
-
sig { params(commit_sha: String, api_token: String).returns(T.untyped) }
|
43
21
|
def self.fetch_commit_details(commit_sha, api_token)
|
44
22
|
conn.get("#{service}/#{owner}/repos/#{repo}/commits/#{commit_sha}",
|
45
23
|
{},
|
46
24
|
{ 'Authorization' => "Bearer #{api_token}" })
|
47
25
|
end
|
48
26
|
|
49
|
-
sig { params(commit_details: T::Hash[T.untyped, T.untyped]).returns(TestCoverageStats) }
|
50
27
|
def self.build_coverage_status(commit_details)
|
51
28
|
file_coverage_details = commit_details.dig('report', 'files')
|
52
29
|
raise ApiError, 'No file coverage information retruned from CodeCov.' unless file_coverage_details
|
@@ -66,30 +43,26 @@ module FeatureMap
|
|
66
43
|
end
|
67
44
|
|
68
45
|
# TODO: Move these values to config.
|
69
|
-
sig { returns(String) }
|
70
46
|
def self.service
|
71
47
|
Private.configuration.code_cov['service'] ||
|
72
48
|
(raise ConfigurationError, 'Missing CodeCov configuration: service')
|
73
49
|
end
|
74
50
|
|
75
|
-
sig { returns(String) }
|
76
51
|
def self.owner
|
77
52
|
Private.configuration.code_cov['owner'] ||
|
78
53
|
(raise ConfigurationError, 'Missing CodeCov configuration: owner')
|
79
54
|
end
|
80
55
|
|
81
|
-
sig { returns(String) }
|
82
56
|
def self.repo
|
83
57
|
Private.configuration.code_cov['repo'] ||
|
84
58
|
(raise ConfigurationError, 'Missing CodeCov configuration: repo')
|
85
59
|
end
|
86
60
|
|
87
|
-
sig { returns(Faraday::Connection) }
|
88
61
|
def self.conn
|
89
|
-
@conn ||=
|
62
|
+
@conn ||= Faraday.new(url: CODE_COV_API_BASE_URL) do |f|
|
90
63
|
f.request :json
|
91
64
|
f.response :json
|
92
|
-
end
|
65
|
+
end
|
93
66
|
end
|
94
67
|
end
|
95
68
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require 'parser/current'
|
@@ -6,20 +5,16 @@ require 'parser/current'
|
|
6
5
|
module FeatureMap
|
7
6
|
module Private
|
8
7
|
class CyclomaticComplexityCalculator
|
9
|
-
extend T::Sig
|
10
|
-
|
11
8
|
COMPLEXITY_NODES = %i[
|
12
9
|
if case while until for
|
13
10
|
rescue when and or
|
14
11
|
].freeze
|
15
12
|
|
16
|
-
sig { params(ast: T.nilable(Parser::AST::Node)).void }
|
17
13
|
def initialize(ast)
|
18
14
|
@ast = ast
|
19
|
-
@complexity =
|
15
|
+
@complexity = 1 # Start at 1 for the base path
|
20
16
|
end
|
21
17
|
|
22
|
-
sig { returns(Integer) }
|
23
18
|
def calculate
|
24
19
|
process(@ast)
|
25
20
|
@complexity
|
@@ -27,7 +22,6 @@ module FeatureMap
|
|
27
22
|
|
28
23
|
private
|
29
24
|
|
30
|
-
sig { params(node: T.nilable(T.any(Parser::AST::Node, Symbol, Integer, String, NilClass))).void }
|
31
25
|
def process(node)
|
32
26
|
return unless node.is_a?(Parser::AST::Node)
|
33
27
|
|