Skip to content

Commit e3eb58f

Browse files
committed
Prefer if guards over next in JSON error formatting
Refactor the four error-formatting methods to use `if` guards instead of `next unless ...` inside loops, extract the inner group loop to `format_group_minimum_coverage_errors` to keep method length in check, and disable RuboCop's `Style/Next` cop (which would otherwise enforce the opposite style).
1 parent b7a0837 commit e3eb58f

2 files changed

Lines changed: 27 additions & 17 deletions

File tree

.rubocop.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,10 @@ Metrics/MethodLength:
188188
CountComments: false
189189
Max: 12 # TODO: Lower to 10
190190

191+
Style/Next:
192+
Description: Prefer `if` guards over `next` inside loops for readability.
193+
Enabled: false
194+
191195
Metrics/ModuleLength:
192196
Description: Avoid modules longer than 100 lines of code.
193197
Max: 300

lib/simplecov/formatter/json_formatter/result_hash_formatter.rb

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,37 +51,42 @@ def format_errors
5151
def format_minimum_coverage_errors
5252
SimpleCov.minimum_coverage.each do |criterion, expected_percent|
5353
actual = SimpleCov.round_coverage(@result.coverage_statistics.fetch(criterion).percent)
54-
next unless actual < expected_percent
5554

56-
key = CRITERION_KEYS.fetch(criterion)
57-
minimum_coverage = formatted_result[:errors][:minimum_coverage] ||= {}
58-
minimum_coverage[key] = {expected: expected_percent, actual: actual}
55+
if actual < expected_percent
56+
key = CRITERION_KEYS.fetch(criterion)
57+
minimum_coverage = formatted_result[:errors][:minimum_coverage] ||= {}
58+
minimum_coverage[key] = {expected: expected_percent, actual: actual}
59+
end
5960
end
6061
end
6162

6263
def format_minimum_coverage_by_file_errors
6364
SimpleCov.minimum_coverage_by_file.each do |criterion, expected_percent|
6465
@result.files.each do |file|
6566
actual = SimpleCov.round_coverage(file.coverage_statistics.fetch(criterion).percent)
66-
next unless actual < expected_percent
6767

68-
key = CRITERION_KEYS.fetch(criterion)
69-
by_file = formatted_result[:errors][:minimum_coverage_by_file] ||= {}
70-
criterion_errors = by_file[key] ||= {}
71-
criterion_errors[file.filename] = {expected: expected_percent, actual: actual}
68+
if actual < expected_percent
69+
key = CRITERION_KEYS.fetch(criterion)
70+
by_file = formatted_result[:errors][:minimum_coverage_by_file] ||= {}
71+
criterion_errors = by_file[key] ||= {}
72+
criterion_errors[file.filename] = {expected: expected_percent, actual: actual}
73+
end
7274
end
7375
end
7476
end
7577

7678
def format_minimum_coverage_by_group_errors
7779
SimpleCov.minimum_coverage_by_group.each do |group_name, minimum_group_coverage|
7880
group = @result.groups[group_name]
79-
next unless group
81+
format_group_minimum_coverage_errors(group_name, group, minimum_group_coverage) if group
82+
end
83+
end
8084

81-
minimum_group_coverage.each do |criterion, expected_percent|
82-
actual = SimpleCov.round_coverage(group.coverage_statistics.fetch(criterion).percent)
83-
next unless actual < expected_percent
85+
def format_group_minimum_coverage_errors(group_name, group, minimum_group_coverage)
86+
minimum_group_coverage.each do |criterion, expected_percent|
87+
actual = SimpleCov.round_coverage(group.coverage_statistics.fetch(criterion).percent)
8488

89+
if actual < expected_percent
8590
key = CRITERION_KEYS.fetch(criterion)
8691
by_group = formatted_result[:errors][:minimum_coverage_by_group] ||= {}
8792
group_errors = by_group[group_name] ||= {}
@@ -98,11 +103,12 @@ def format_maximum_coverage_drop_errors
98103

99104
SimpleCov.maximum_coverage_drop.each do |criterion, max_drop|
100105
drop = coverage_drop_for(criterion, last_run)
101-
next unless drop && drop > max_drop
102106

103-
key = CRITERION_KEYS.fetch(criterion)
104-
coverage_drop = formatted_result[:errors][:maximum_coverage_drop] ||= {}
105-
coverage_drop[key] = {maximum: max_drop, actual: drop}
107+
if drop && drop > max_drop
108+
key = CRITERION_KEYS.fetch(criterion)
109+
coverage_drop = formatted_result[:errors][:maximum_coverage_drop] ||= {}
110+
coverage_drop[key] = {maximum: max_drop, actual: drop}
111+
end
106112
end
107113
end
108114

0 commit comments

Comments
 (0)