class Steep::Server::WorkerProcess

def self.spawn_worker(type, name:, steepfile:, steep_command:, index:, delay_shutdown:, patterns:)

def self.spawn_worker(type, name:, steepfile:, steep_command:, index:, delay_shutdown:, patterns:)
  args = ["--name=#{name}", "--steepfile=#{steepfile}"]
  args << (%w(debug info warn error fatal unknown)[Steep.logger.level].yield_self {|log_level| "--log-level=#{log_level}" })
  if Steep.log_output.is_a?(String)
    args << "--log-output=#{Steep.log_output}"
  end
  if (max, this = index)
    args << "--max-index=#{max}"
    args << "--index=#{this}"
  end
  if delay_shutdown
    args << "--delay-shutdown"
  end
  command = case type
            when :interaction
              [steep_command, "worker", "--interaction", *args, *patterns]
            when :typecheck
              [steep_command, "worker", "--typecheck", *args, *patterns]
            else
              raise "Unknown type: #{type}"
            end
  stdin, stdout, thread = if Gem.win_platform?
                            __skip__ = Open3.popen2(*command, new_pgroup: true)
                          else
                            __skip__ = Open3.popen2(*command, pgroup: true)
                          end
  stderr = nil
  writer = LanguageServer::Protocol::Transport::Io::Writer.new(stdin)
  reader = LanguageServer::Protocol::Transport::Io::Reader.new(stdout)
  new(reader: reader, writer: writer, stderr: stderr, wait_thread: thread, name: name, index: index&.[](1))
end