Class: Piggly::Compiler::LineCoverage

Inherits:
Object
  • Object
show all
Defined in:
lib/piggly/compiler/line_coverage.rb

Overview

Calculates line-level coverage from tagged parse tree nodes.

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ LineCoverage

Returns a new instance of LineCoverage.



8
9
10
# File 'lib/piggly/compiler/line_coverage.rb', line 8

def initialize(config)
  @config = config
end

Instance Method Details

#calculate(procedure, profile) ⇒ Hash

Calculate line coverage for a procedure

Parameters:

Returns:

  • (Hash)

    { line_number => { covered: bool } }



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/piggly/compiler/line_coverage.rb', line 16

def calculate(procedure, profile)
  Parser.parser
  
  compiler = TraceCompiler.new(@config)
  
  # Let compile() handle staleness - it will recompile if needed
  data = compiler.compile(procedure)
  
  # Return empty if compilation failed (tree is nil)
  tree = data[:tree]
  return {} if tree.nil?
  
  source = procedure.source(@config)
  
  coverage = {}
  traverse(tree, profile, source, coverage)
  coverage
end

#summary(coverage) ⇒ Hash

Calculate summary statistics from coverage data

Parameters:

  • coverage (Hash)

    line coverage data from calculate()

Returns:

  • (Hash)

    { count: Integer, percent: Float }



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/piggly/compiler/line_coverage.rb', line 38

def summary(coverage)
  return { count: 0, percent: nil } if coverage.empty?
  
  total_lines = coverage.size
  covered_lines = coverage.count { |_, v| v[:covered] }
  
  {
    count: total_lines,
    percent: total_lines > 0 ? (covered_lines.to_f / total_lines * 100) : nil
  }
end