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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/bin/featuremap +0 -1
  4. data/lib/feature_map/cli.rb +0 -2
  5. data/lib/feature_map/code_features/plugin.rb +2 -21
  6. data/lib/feature_map/code_features/plugins/identity.rb +1 -8
  7. data/lib/feature_map/code_features.rb +1 -31
  8. data/lib/feature_map/commit.rb +0 -19
  9. data/lib/feature_map/configuration.rb +40 -17
  10. data/lib/feature_map/constants.rb +3 -5
  11. data/lib/feature_map/mapper.rb +0 -26
  12. data/lib/feature_map/output_color.rb +0 -11
  13. data/lib/feature_map/private/additional_metrics_file.rb +9 -103
  14. data/lib/feature_map/private/assignment_applicator.rb +0 -12
  15. data/lib/feature_map/private/assignment_mappers/directory_assignment.rb +4 -26
  16. data/lib/feature_map/private/assignment_mappers/feature_definition_assignment.rb +1 -21
  17. data/lib/feature_map/private/assignment_mappers/feature_globs.rb +7 -40
  18. data/lib/feature_map/private/assignment_mappers/file_annotations.rb +20 -44
  19. data/lib/feature_map/private/assignments_file.rb +8 -54
  20. data/lib/feature_map/private/code_cov.rb +2 -29
  21. data/lib/feature_map/private/cyclomatic_complexity_calculator.rb +1 -7
  22. data/lib/feature_map/private/docs/index.html +2 -2
  23. data/lib/feature_map/private/documentation_site.rb +0 -16
  24. data/lib/feature_map/private/extension_loader.rb +0 -3
  25. data/lib/feature_map/private/feature_assigner.rb +0 -4
  26. data/lib/feature_map/private/feature_metrics_calculator.rb +2 -16
  27. data/lib/feature_map/private/feature_plugins/assignment.rb +0 -6
  28. data/lib/feature_map/private/glob_cache.rb +2 -29
  29. data/lib/feature_map/private/health_calculator.rb +122 -0
  30. data/lib/feature_map/private/lines_of_code_calculator.rb +10 -21
  31. data/lib/feature_map/private/metrics_file.rb +1 -25
  32. data/lib/feature_map/private/percentile_metrics_calculator.rb +117 -0
  33. data/lib/feature_map/private/release_notification_builder.rb +1 -13
  34. data/lib/feature_map/private/test_coverage_file.rb +12 -39
  35. data/lib/feature_map/private/test_pyramid_file.rb +0 -41
  36. data/lib/feature_map/private/todo_inspector.rb +16 -30
  37. data/lib/feature_map/private/validations/features_up_to_date.rb +1 -6
  38. data/lib/feature_map/private/validations/files_have_features.rb +2 -7
  39. data/lib/feature_map/private/validations/files_have_unique_features.rb +1 -6
  40. data/lib/feature_map/private.rb +7 -44
  41. data/lib/feature_map/validator.rb +0 -13
  42. data/lib/feature_map.rb +8 -49
  43. 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 ||= T.let(Faraday.new(url: CODE_COV_API_BASE_URL) do |f|
62
+ @conn ||= Faraday.new(url: CODE_COV_API_BASE_URL) do |f|
90
63
  f.request :json
91
64
  f.response :json
92
- end, T.nilable(Faraday::Connection))
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 = T.let(1, Integer) # Start at 1 for the base path
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