class Sorbet::Private::GemGeneratorTracepoint::TracepointSerializer

def serialize(output_dir)

def serialize(output_dir)
  gem_class_defs = preprocess(@files)
  FileUtils.mkdir_p(output_dir) unless gem_class_defs.empty?
  gem_class_defs.each do |gem, klass_ids|
    File.open("#{File.join(output_dir, gem[:gem])}.rbi", 'w') do |f|
      f.write(HEADER)
      f.write("#
ou would like to make changes to this file, great! Please create the gem's shim here:
tps://github.com/sorbet/sorbet-typed/new/master?filename=lib/#{gem[:gem]}/all/#{gem[:gem]}.rbi
      f.write("# #{gem[:gem]}-#{gem[:version]}\n\n")
      klass_ids.each do |klass_id, class_def|
        klass = class_def.klass
        f.write("#{Sorbet::Private::RealStdlib.real_is_a?(klass, Class) ? 'class' : 'module'} #{class_name(klass)}")
        f.write(" < #{class_name(klass.superclass)}") if Sorbet::Private::RealStdlib.real_is_a?(klass, Class) && ![Object, nil].include?(klass.superclass)
        f.write("\n")
        rows = class_def.defs.map do |item|
          case item[:type]
          when :method
            if !valid_method_name?(item[:method])
              # warn("Invalid method name: #{klass}.#{item[:method]}")
              next
            end
            if BAD_METHODS.include?([gem[:gem], class_name(klass), item[:method]])
              next
            end
            begin
              method = item[:singleton] ? Sorbet::Private::RealStdlib.real_method(klass, item[:method]) : klass.instance_method(item[:method])
              "#{generate_method(method, !item[:singleton])}"
            rescue NameError
            end
          when :include, :extend
            name = class_name(item[item[:type]])
            "  #{item[:type]} #{name}"
          end
        end
        rows = rows.compact.sort
        f.write(rows.join("\n"))
        f.write("\n") if !rows.empty?
        f.write("end\n")
      end
    end
  end
end