class Spoom::Coverage::SnapshotPrinter

def percent(value, total)

def percent(value, total)
  return "" if value.nil? || total.nil? || total == 0
  " (#{(value.to_f * 100.0 / total.to_f).round}%)"
end

def print_map(hash, total)

def print_map(hash, total)
  indent
  hash.each do |key, value|
    next unless value > 0
    printl("#{key}: #{value}#{percent(value, total)}")
  end
  dedent
end

def print_snapshot(snapshot)

def print_snapshot(snapshot)
  methods = snapshot.methods_with_sig + snapshot.methods_without_sig
  calls = snapshot.calls_typed + snapshot.calls_untyped
  if snapshot.version_static || snapshot.version_runtime
    printl("Sorbet static: #{snapshot.version_static}") if snapshot.version_static
    printl("Sorbet runtime: #{snapshot.version_runtime}") if snapshot.version_runtime
    printn
  end
  printl("Content:")
  indent
  printl("files: #{snapshot.files} (including #{snapshot.rbi_files} RBIs)")
  printl("modules: #{snapshot.modules}")
  printl("classes: #{snapshot.classes - snapshot.singleton_classes}")
  printl("methods: #{methods}")
  dedent
  printn
  printl("Sigils:")
  print_map(snapshot.sigils, snapshot.files)
  printn
  printl("Methods:")
  methods_map = {
    "with signature" => snapshot.methods_with_sig,
    "without signature" => snapshot.methods_without_sig,
  }
  print_map(methods_map, methods)
  printn
  printl("Calls:")
  calls_map = {
    "typed" => snapshot.calls_typed,
    "untyped" => snapshot.calls_untyped,
  }
  print_map(calls_map, calls)
end