class Spoom::Coverage::D3::CircleMap::Sigils

Public Class Methods

new(id, sigils_tree) click to toggle source
Calls superclass method Spoom::Coverage::D3::Base::new
# File lib/spoom/coverage/d3/circle_map.rb, line 150
def initialize(id, sigils_tree)
  @scores = T.let({}, T::Hash[FileTree::Node, Float])
  @strictnesses = T.let({}, T::Hash[FileTree::Node, T.nilable(String)])
  @sigils_tree = sigils_tree
  super(id, sigils_tree.roots.map { |r| tree_node_to_json(r) })
end

Public Instance Methods

tree_node_score(node) click to toggle source
# File lib/spoom/coverage/d3/circle_map.rb, line 178
def tree_node_score(node)
  unless @scores.key?(node)
    if node.name =~ /\.rbi?$/
      case tree_node_strictness(node)
      when "true", "strict", "strong"
        @scores[node] = 1.0
      end
    elsif !node.children.empty?
      @scores[node] = node.children.values.sum { |n| tree_node_score(n) } / node.children.size.to_f
    end
  end
  @scores[node] || 0.0
end
tree_node_strictness(node) click to toggle source
# File lib/spoom/coverage/d3/circle_map.rb, line 170
def tree_node_strictness(node)
  prefix = @sigils_tree.strip_prefix
  path = node.path
  path = "#{prefix}/#{path}" if prefix
  @strictnesses[node] ||= Spoom::Sorbet::Sigils.file_strictness(path)
end
tree_node_to_json(node) click to toggle source
# File lib/spoom/coverage/d3/circle_map.rb, line 158
def tree_node_to_json(node)
  if node.children.empty?
    return { name: node.name, strictness: tree_node_strictness(node) }
  end
  {
    name: node.name,
    children: node.children.values.map { |n| tree_node_to_json(n) },
    score: tree_node_score(node),
  }
end