Class: SimpleCov::LinesClassifier
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | lib/simplecov/lines_classifier.rb |
Overview
Classifies whether lines are relevant for code coverage analysis. Comments & whitespace lines, and :nocov: token blocks, are considered not relevant.
Constant Summary
-
COMMENT_LINE =
# File 'lib/simplecov/lines_classifier.rb', line 14/^\s*#/ -
NOT_RELEVANT =
# File 'lib/simplecov/lines_classifier.rb', line 11nil -
RELEVANT =
# File 'lib/simplecov/lines_classifier.rb', line 100 -
WHITESPACE_LINE =
# File 'lib/simplecov/lines_classifier.rb', line 13/^\s*$/ -
WHITESPACE_OR_COMMENT_LINE =
# File 'lib/simplecov/lines_classifier.rb', line 15Regexp.union(WHITESPACE_LINE, COMMENT_LINE)
Class Method Summary
Instance Method Summary
Class Method Details
.no_cov_line
[ GitHub ]# File 'lib/simplecov/lines_classifier.rb', line 17
def self.no_cov_line /^(\s*)#(\s*)(:#{SimpleCov.current_nocov_token}:)/o end
.no_cov_line?(line) ⇒ Boolean
# File 'lib/simplecov/lines_classifier.rb', line 21
def self.no_cov_line?(line) no_cov_line.match?(line) rescue ArgumentError # E.g., line contains an invalid byte sequence in UTF-8 false end
.whitespace_line?(line) ⇒ Boolean
# File 'lib/simplecov/lines_classifier.rb', line 28
def self.whitespace_line?(line) WHITESPACE_OR_COMMENT_LINE.match?(line) rescue ArgumentError # E.g., line contains an invalid byte sequence in UTF-8 false end
Instance Method Details
#classify(lines)
[ GitHub ]# File 'lib/simplecov/lines_classifier.rb', line 35
def classify(lines) lines = lines.to_a directive_disabled = directive_disabled_line_set(lines) skipping = false lines.map.with_index(1) do |line, line_number| skipping = !skipping if self.class.no_cov_line?(line) not_relevant_line?(line, line_number, skipping, directive_disabled) ? NOT_RELEVANT : RELEVANT end end
#directive_disabled_line_set(lines) (private)
[ GitHub ]# File 'lib/simplecov/lines_classifier.rb', line 55
def directive_disabled_line_set(lines) Directive.disabled_ranges(lines).fetch(:line).each_with_object(Set.new) do |range, set| range.each { |line_number| set.add(line_number) } end end
#not_relevant_line?(line, line_number, skipping, directive_disabled) ⇒ Boolean (private)
# File 'lib/simplecov/lines_classifier.rb', line 48
def not_relevant_line?(line, line_number, skipping, directive_disabled) skipping || self.class.no_cov_line?(line) || directive_disabled.include?(line_number) || self.class.whitespace_line?(line) end