class SimpleCov::SourceFile
source lines and featuring helpers to interpret that data.
Representation of a source file including it’s coverage data, source code,
def branches
def branches @branches ||= BranchBuilder.new(self).call end
def branches_coverage_percent
def branches_coverage_percent SimpleCov::Deprecation.warn("`SimpleCov::SourceFile#branches_coverage_percent` is deprecated. " \ "Use `covered_percent(:branch)`.") covered_percent(:branch) end
def branches_for_line(line_number)
def branches_for_line(line_number) branches_report.fetch(line_number, []) end
def branches_report
def branches_report @branches_report ||= branches.reject(&:skipped?).group_by(&:report_line).transform_values { |bs| bs.map(&:report) } end
def coverage_statistics(criterion = nil)
returns the `{line:, branch:, method:}` Hash; pass a criterion symbol
The per-criterion coverage statistics for this file. With no argument
`SimpleCov.coverage_criterion_enabled?`.
(FileList, formatters) decide which keys to surface based on
enabled during the run — those collapse to 0/0/0. Consumers
value is a CoverageStatistics, even for criteria that weren't
Returns a hash keyed by every supported coverage criterion. Each
def coverage_statistics(criterion = nil) stats = (@coverage_statistics ||= Statistics.new(self).call) criterion ? stats[criterion] : stats end
def covered_branches
isn't declared in code but is given by default by the coverage
some conditions like `case` may have an additional `else` that
Select the covered branches. We use a tree schema here because
def covered_branches @covered_branches ||= branches.select(&:covered?) end
def covered_lines
def covered_lines @covered_lines ||= lines.select(&:covered?) end
def covered_methods
def covered_methods @covered_methods ||= methods.select(&:covered?) end
def covered_percent(criterion = :line)
The coverage for this file in percent, for the given criterion (line by
def covered_percent(criterion = :line) coverage_statistics(criterion)&.percent end
def covered_strength(criterion = :line)
def covered_strength(criterion = :line) coverage_statistics(criterion)&.strength end
def initialize(filename, coverage_data, loaded: true)
def initialize(filename, coverage_data, loaded: true) @filename = filename @coverage_data = coverage_data @loaded = loaded end
def line(number)
def line(number) lines[number - 1] end
def line_with_missed_branch?(line_number)
def line_with_missed_branch?(line_number) branches_for_line(line_number).any? { |_type, count| count.zero? } end
def lines
Returns all source lines for this file as instances of SimpleCov::SourceFile::Line,
def lines @lines ||= LineBuilder.new(self).call end
def lines_of_code
def lines_of_code coverage_statistics[:line]&.total || 0 end
def methods
def methods @methods ||= MethodBuilder.new(self).call end
def methods_coverage_percent
def methods_coverage_percent SimpleCov::Deprecation.warn("`SimpleCov::SourceFile#methods_coverage_percent` is deprecated. " \ "Use `covered_percent(:method)`.") covered_percent(:method) end
def missed_branches
def missed_branches @missed_branches ||= branches.select(&:missed?) end
def missed_lines
Returns all lines that should have been, but were not covered
def missed_lines @missed_lines ||= lines.select(&:missed?) end
def missed_methods
def missed_methods @missed_methods ||= methods.select(&:missed?) end
def never_lines
Returns all lines that are not relevant for coverage as
def never_lines @never_lines ||= lines.select(&:never?) end
def no_branches?
def no_branches? total_branches.empty? end
def no_lines?
def no_lines? lines.empty? || (lines.length == never_lines.size) end
def not_loaded?
def not_loaded? !@loaded end
def project_filename
def project_filename @filename.delete_prefix(SimpleCov.root).sub(%r{\A[/\\]}, "") end
def relevant_lines
def relevant_lines lines.size - never_lines.size - skipped_lines.size end
def skipped_lines
def skipped_lines @skipped_lines ||= lines.select(&:skipped?) end
def src
The source code for this file. Aliased as :source.
def src @src ||= SourceLoader.call(filename) end
def total_branches
def total_branches @total_branches ||= covered_branches + missed_branches end