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 covered_lines

Returns all covered lines as SimpleCov::SourceFile::Line
def covered_lines
  @covered_lines ||= lines.select(&:covered?)
end

def covered_percent

The coverage for this file in percent. 0 if the file has no relevant lines
def covered_percent
  return 100.0 if lines.length.zero? || lines.length == never_lines.count
  relevant_lines = lines.count - never_lines.count - skipped_lines.count
  if relevant_lines.zero?
    0.0
  else
    Float((covered_lines.count) * 100.0 / relevant_lines.to_f)
  end
end

def covered_strength

def covered_strength
  return 0.0 if lines.length.zero? || lines.length == never_lines.count
  lines_strength = 0
  lines.each do |c|
    lines_strength += c.coverage if c.coverage
  end
  effective_lines_count = Float(lines.count - never_lines.count - skipped_lines.count)
  if effective_lines_count.zero?
    0.0
  else
    strength = lines_strength / effective_lines_count
    round_float(strength, 1)
  end
end

def initialize(filename, coverage)

def initialize(filename, coverage)
  @filename = filename
  @coverage = coverage
  File.open(filename, "rb") { |f| @src = f.readlines }
end

def line(number)

Access SimpleCov::SourceFile::Line source lines by line number
def line(number)
  lines[number - 1]
end

def lines

and thus including coverage data. Aliased as :source_lines
Returns all source lines for this file as instances of SimpleCov::SourceFile::Line,
def lines
  return @lines if defined? @lines
  # Warning to identify condition from Issue #56
  if coverage.size > src.size
    $stderr.puts "Warning: coverage data provided by Coverage [#{coverage.size}] exceeds number of lines in #{filename} [#{src.size}]"
  end
  # Initialize lines
  @lines = []
  src.each_with_index do |src, i|
    @lines << SimpleCov::SourceFile::Line.new(src, i + 1, coverage[i])
  end
  process_skipped_lines!
  @lines
end

def lines_of_code

Returns the number of relevant lines (covered + missed)
def lines_of_code
  covered_lines.count + missed_lines.count
end

def missed_lines

as instances of SimpleCov::SourceFile::Line
Returns all lines that should have been, but were not covered
def missed_lines
  @missed_lines ||= lines.select(&:missed?)
end

def never_lines

SimpleCov::SourceFile::Line instances
Returns all lines that are not relevant for coverage as
def never_lines
  @never_lines ||= lines.select(&:never?)
end

def process_skipped_lines!

as skipped.
Will go through all source files and mark lines that are wrapped within # :nocov: comment blocks
def process_skipped_lines!
  skipping = false
  lines.each do |line|
    if line.src =~ /^([\s]*)#([\s]*)(\:#{SimpleCov.nocov_token}\:)/
      skipping = !skipping
    else
      line.skipped! if skipping
    end
  end
end

def round_float(float, places)

Returns:
  • (Float) -
def round_float(float, places)
  factor = Float(10 * places)
  Float((float * factor).round / factor)
end

def skipped_lines

Returns all lines that were skipped as SimpleCov::SourceFile::Line instances
def skipped_lines
  @skipped_lines ||= lines.select(&:skipped?)
end