@@ -104,7 +104,7 @@ def covered_percent
104104 return 0.0 if relevant_lines . zero?
105105
106106 # handle edge case where runtime in dev can go over 100%
107- [ Float ( covered_lines . size * 100.0 / relevant_lines . to_f ) , 100.0 ] . min &.round ( 2 )
107+ [ Float ( covered_lines_count * 100.0 / relevant_lines . to_f ) , 100.0 ] . min &.round ( 2 )
108108 end
109109
110110 def formatted_covered_percent
@@ -128,7 +128,8 @@ def lines_strength
128128 end
129129
130130 def relevant_lines
131- @runtime_relavant_lines || ( lines . size - never_lines . size - skipped_lines . size )
131+ return @runtime_relavant_lines if @runtime_relavant_lines
132+ lines_of_code
132133 end
133134
134135 # Returns all covered lines as Coverband::Utils::SourceFile::Line
@@ -137,7 +138,8 @@ def covered_lines
137138 end
138139
139140 def covered_lines_count
140- covered_lines &.count
141+ return @covered_lines . size if defined? ( @covered_lines ) && @covered_lines
142+ lines . count ( &:covered? )
141143 end
142144
143145 def line_coverage ( index )
@@ -154,20 +156,39 @@ def missed_lines
154156 @missed_lines ||= lines . select ( &:missed? )
155157 end
156158
159+ def missed_lines_count
160+ return @missed_lines . size if defined? ( @missed_lines ) && @missed_lines
161+ lines . count ( &:missed? )
162+ end
163+
157164 # Returns all lines that are not relevant for coverage as
158165 # Coverband::Utils::SourceFile::Line instances
159166 def never_lines
160167 @never_lines ||= lines . select ( &:never? )
161168 end
162169
170+ def never_lines_count
171+ return @never_lines . size if defined? ( @never_lines ) && @never_lines
172+ lines . count ( &:never? )
173+ end
174+
163175 # Returns all lines that were skipped as Coverband::Utils::SourceFile::Line instances
164176 def skipped_lines
165177 @skipped_lines ||= lines . select ( &:skipped? )
166178 end
167179
180+ def skipped_lines_count
181+ return @skipped_lines . size if defined? ( @skipped_lines ) && @skipped_lines
182+ lines . count ( &:skipped? )
183+ end
184+
168185 # Returns the number of relevant lines (covered + missed)
169186 def lines_of_code
170- covered_lines . size + missed_lines . size
187+ @lines_of_code ||= if @covered_lines && @missed_lines
188+ @covered_lines . size + @missed_lines . size
189+ else
190+ lines . count { |l | l . covered? || l . missed? }
191+ end
171192 end
172193
173194 # Will go through all source files and mark lines that are wrapped within # :nocov: comment blocks
0 commit comments