class Steep::Server::WorkerProcess

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

def self.fork_worker(type, name:, steepfile:, index:, delay_shutdown:, patterns:)
  stdin_in, stdin_out = IO.pipe
  stdout_in, stdout_out = IO.pipe
  worker = Drivers::Worker.new(stdout: stdout_out, stdin: stdin_in, stderr: STDERR)
  worker.steepfile = steepfile
  worker.worker_type = type
  worker.worker_name = name
  worker.delay_shutdown = delay_shutdown
  if (max, this = index)
    worker.max_index = max
    worker.index = this
  end
  worker.commandline_args = patterns
  pid = fork do
    worker.run()
  end
  pid or raise
  writer = LanguageServer::Protocol::Transport::Io::Writer.new(stdin_out)
  reader = LanguageServer::Protocol::Transport::Io::Reader.new(stdout_in)
  # @type var wait_thread: Thread & _ProcessWaitThread
  wait_thread = _ = Thread.new { Process.waitpid(pid) }
  wait_thread.define_singleton_method(:pid) { pid }
  stdin_in.close
  stdout_out.close
  new(
    reader: reader,
    writer: writer,
    stderr: STDERR,
    wait_thread: wait_thread,
    name: name,
    index: index&.[](1)
  )
end