class Sorbet::Private::GemGeneratorTracepoint::TracepointSerializer

def generate_method(method, instance, spaces = 2)

def generate_method(method, instance, spaces = 2)
  # method.parameters is an array of:
  # a      [:req, :a]
  # b = 1  [:opt, :b]
  # c:     [:keyreq, :c]
  # d: 1   [:key, :d]
  # *e     [:rest, :e]
  # **f    [:keyrest, :f]
  # &g     [:block, :g]
  prefix = ' ' * spaces
  parameters = method.parameters.map.with_index do |(type, name), index|
    name = "arg#{index}" if name.nil? || name.empty?
    case type
    when :req
      name
    when :opt
      "#{name} = nil"
    when :keyreq
      "#{name}:"
    when :key
      "#{name}: nil"
    when :rest
      case name
      when :* then "*"
      else "*#{name}"
      end
    when :keyrest
      case name
      when :** then "**"
      else "**#{name}"
      end
    when :block
      case name
      when :& then "&"
      else "&#{name}"
      end
    else
      raise "Unknown parameter type: #{type}"
    end
  end
  parameters = parameters.join(', ')
  parameters = "(#{parameters})" unless parameters.empty?
  "#{prefix}def #{instance ? '' : 'self.'}#{method.name}#{parameters}; end"
end