module DeepCover::Analyser::Base
Attributes
options[R]
source[R]
Public Class Methods
new(source, **options)
click to toggle source
# File lib/deep_cover/analyser/base.rb, line 9 def initialize(source, **options) @source = to_source(source, **options) @options = options end
Public Instance Methods
covered_code()
click to toggle source
# File lib/deep_cover/analyser/base.rb, line 81 def covered_code @source.covered_code end
each_node(from = covered_code.root) { |from| ... }
click to toggle source
Iterates on nodes in the subset. Yields the node and it's children (within the subset)
# File lib/deep_cover/analyser/base.rb, line 67 def each_node(from = covered_code.root, &block) return to_enum(:each_node) unless block_given? begin yield from unless from.is_a?(Node::Root) rescue ProblemWithDiagnostic raise rescue StandardError, SystemStackError => e raise ProblemWithDiagnostic.new(covered_code, from.diagnostic_expression, e) end node_children(from).each do |child| each_node(child, &block) end end
node_children(node)
click to toggle source
Looking exclusively at our subset of nodes, returns the node's direct descendants
# File lib/deep_cover/analyser/base.rb, line 15 def node_children(node) @source.node_children(node) end
node_covered?(node)
click to toggle source
# File lib/deep_cover/analyser/base.rb, line 24 def node_covered?(node) covered?(node_runs(node)) end
node_runs(node)
click to toggle source
Returns the number of runs of the node (assumed to be in our subset)
# File lib/deep_cover/analyser/base.rb, line 20 def node_runs(node) @source.node_runs(node) end
node_runs_map()
click to toggle source
# File lib/deep_cover/analyser/base.rb, line 28 def node_runs_map each_node.map do |node| [node, node_runs(node)] end.to_h end
node_stat_contributions(nodes)
click to toggle source
# File lib/deep_cover/analyser/base.rb, line 51 def node_stat_contributions(nodes) if respond_to? :node_stat_contribution nodes.sum { |n| node_stat_contribution(n) } else nodes.size end end
node_stat_type(node)
click to toggle source
# File lib/deep_cover/analyser/base.rb, line 39 def node_stat_type(node) return :not_executable unless node.executable? case node_runs(node) when nil :ignored when 0 :not_executed else :executed end end
results()
click to toggle source
Analyser-specific output
# File lib/deep_cover/analyser/base.rb, line 35 def results node_runs_map end
stats()
click to toggle source
# File lib/deep_cover/analyser/base.rb, line 59 def stats st = each_node.group_by { |n| node_stat_type(n) } .transform_values { |nodes| node_stat_contributions(nodes) } Analyser::Stats.new(**st) end
Protected Instance Methods
convert(covered_code, **options)
click to toggle source
# File lib/deep_cover/analyser/base.rb, line 87 def convert(covered_code, **options) Analyser::Node.new(covered_code, **options) end
to_source(source, **options)
click to toggle source
# File lib/deep_cover/analyser/base.rb, line 91 def to_source(source, **options) case source when Analyser source when CoveredCode convert(source, **options) when Node convert(source.covered_code, **options) else raise ArgumentError, "expected Analyser, Node or CoveredCode, got #{source.class}" end end