class DeepCover::Analyser::Node

Public Class Methods

human_name() click to toggle source
# File lib/deep_cover/analyser/node.rb, line 7
def self.human_name
  'Nodes'
end
new(source, **options) click to toggle source
Calls superclass method
# File lib/deep_cover/analyser/node.rb, line 11
def initialize(source, **options)
  @cache = {}.compare_by_identity
  super
  @allow_filters = Config.options_to_ignored(**options)
                         .map { |kind| Node.filter_to_method_name(kind) }
  @nocov_ranges = FlagCommentAssociator.new(covered_code)
end

Public Instance Methods

in_subset?(node, _parent) click to toggle source
# File lib/deep_cover/analyser/node.rb, line 27
def in_subset?(node, _parent)
  node.executable?
end
node_runs(node) click to toggle source
Calls superclass method
# File lib/deep_cover/analyser/node.rb, line 19
def node_runs(node)
  @cache.fetch(node) do
    runs = super
    runs = nil if runs == 0 && should_be_ignored?(node)
    @cache[node] = runs
  end
end

Protected Instance Methods

convert(node, **) click to toggle source
# File lib/deep_cover/analyser/node.rb, line 33
def convert(node, **)
  Analyser::CoveredCodeSource.new(node)
end

Private Instance Methods

is_ignored?(node) click to toggle source
# File lib/deep_cover/analyser/node.rb, line 45
def is_ignored?(node)
  if node == nil
    false
  elsif node.executable?
    node_runs(node).nil?
  else
    is_ignored?(node.parent)
  end
end
should_be_ignored?(node) click to toggle source
# File lib/deep_cover/analyser/node.rb, line 39
def should_be_ignored?(node)
  @nocov_ranges.include?(node) ||
    @allow_filters.any? { |f| node.public_send(f) } ||
    is_ignored?(node.parent)
end