class DEBUGGER__::CallTracer

def setup

def setup
  @tracer = TracePoint.new(:a_call, :a_return){|tp|
    next if skip?(tp)
    depth = caller.size
    call_identifier_str =
      if tp.defined_class
        minfo(tp)
      else
        "block"
      end
    call_identifier_str = colorize_blue(call_identifier_str)
    case tp.event
    when :call, :c_call, :b_call
      depth += 1 if tp.event == :c_call
      sp = ' ' * depth
      out tp, ">#{sp}#{call_identifier_str}", depth
    when :return, :c_return, :b_return
      depth += 1 if tp.event == :c_return
      sp = ' ' * depth
      return_str = colorize_magenta(DEBUGGER__.safe_inspect(tp.return_value, short: true))
      out tp, "<#{sp}#{call_identifier_str} #=> #{return_str}", depth
    end
  }
end

def skip_with_pattern?(tp)

def skip_with_pattern?(tp)
  super && !tp.method_id&.match?(@pattern)
end